summaryrefslogtreecommitdiff
path: root/src/syntax.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2020-09-19 19:54:01 +0300
committerEli Zaretskii <eliz@gnu.org>2020-09-19 19:54:01 +0300
commitdf04f3e755f3001ebb9cc428faa7fa46059e636b (patch)
treeacf478dc8aca3749f10ad6f9d5527cc29b05ed4c /src/syntax.c
parentfd1fe1e1ecb6c68bbdea4bf071166779388174d0 (diff)
Fix a rare segfault in syntax.c
* src/syntax.c (Fforward_comment): Prevent the loop for COUNT < 0 from going outside the valid range of character/byte positions. (Bug#43499) * doc/lispref/syntax.texi (Syntax Class Table): Mention the "comment-fence" and "string-fence" as alternative names of 2 syntax classes.
Diffstat (limited to 'src/syntax.c')
-rw-r--r--src/syntax.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/syntax.c b/src/syntax.c
index a79ab863367..e8b32f5a445 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -2545,20 +2545,23 @@ between them, return t; otherwise return nil. */)
bool fence_found = 0;
ptrdiff_t ini = from, ini_byte = from_byte;
- while (1)
+ if (from > stop)
{
- DEC_BOTH (from, from_byte);
- UPDATE_SYNTAX_TABLE_BACKWARD (from);
- c = FETCH_CHAR_AS_MULTIBYTE (from_byte);
- if (SYNTAX (c) == Scomment_fence
- && !char_quoted (from, from_byte))
+ while (1)
{
- fence_found = 1;
- break;
+ DEC_BOTH (from, from_byte);
+ UPDATE_SYNTAX_TABLE_BACKWARD (from);
+ c = FETCH_CHAR_AS_MULTIBYTE (from_byte);
+ if (SYNTAX (c) == Scomment_fence
+ && !char_quoted (from, from_byte))
+ {
+ fence_found = 1;
+ break;
+ }
+ else if (from == stop)
+ break;
+ rarely_quit (++quit_count);
}
- else if (from == stop)
- break;
- rarely_quit (++quit_count);
}
if (fence_found == 0)
{