diff options
| author | Eli Zaretskii <eliz@gnu.org> | 2020-09-19 19:54:01 +0300 |
|---|---|---|
| committer | Eli Zaretskii <eliz@gnu.org> | 2020-09-19 19:54:01 +0300 |
| commit | df04f3e755f3001ebb9cc428faa7fa46059e636b (patch) | |
| tree | acf478dc8aca3749f10ad6f9d5527cc29b05ed4c /src/syntax.c | |
| parent | fd1fe1e1ecb6c68bbdea4bf071166779388174d0 (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.c | 25 |
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) { |
