summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2022-11-22 20:22:41 +0200
committerEli Zaretskii <eliz@gnu.org>2022-11-22 20:22:41 +0200
commit368d2531bec84c2e75b2fd2f32bb59fc2e7ee520 (patch)
treedf31e2d30bd5aa7aa06e9ce5838750f2ee3dcbce /src
parentfa567684fa276511ea981cd208f99b67c521d8aa (diff)
downloademacs-368d2531bec84c2e75b2fd2f32bb59fc2e7ee520.tar.gz
Fix 'treesit-max-buffer-size' and its use
* lisp/treesit.el (treesit-max-buffer-size): Avoid overflow in computing buffer-size limit. Account for 32-but systems built "--with-wide-int". Extend doc string. (treesit-ready-p): Compare the limit with the size of the buffer in bytes, not in characters. * src/treesit.c (treesit_check_buffer_size): Measure buffer size in bytes.
Diffstat (limited to 'src')
-rw-r--r--src/treesit.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/treesit.c b/src/treesit.c
index 835b07c9312..4a7c4019561 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -840,11 +840,11 @@ treesit_ensure_position_synced (Lisp_Object parser)
static void
treesit_check_buffer_size (struct buffer *buffer)
{
- ptrdiff_t buffer_size = (BUF_Z (buffer) - BUF_BEG (buffer));
- if (buffer_size > UINT32_MAX)
+ ptrdiff_t buffer_size_bytes = (BUF_Z_BYTE (buffer) - BUF_BEG_BYTE (buffer));
+ if (buffer_size_bytes > UINT32_MAX)
xsignal2 (Qtreesit_buffer_too_large,
build_pure_c_string ("Buffer size cannot be larger than 4GB"),
- make_fixnum (buffer_size));
+ make_fixnum (buffer_size_bytes));
}
static Lisp_Object treesit_make_ranges (const TSRange *, uint32_t, struct buffer *);