mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-15 09:47:20 +00:00
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.
This commit is contained in:
parent
fd1fe1e1ec
commit
df04f3e755
@ -256,10 +256,11 @@ look in the standard syntax table to find the syntax of this
|
||||
character.
|
||||
|
||||
@item Generic comment delimiters: @samp{!}
|
||||
Characters that start or end a special kind of comment. @emph{Any}
|
||||
generic comment delimiter matches @emph{any} generic comment
|
||||
delimiter, but they cannot match a comment starter or comment ender;
|
||||
generic comment delimiters can only match each other.
|
||||
(This syntax class is also known as ``comment-fence''.) Characters
|
||||
that start or end a special kind of comment. @emph{Any} generic
|
||||
comment delimiter matches @emph{any} generic comment delimiter, but
|
||||
they cannot match a comment starter or comment ender; generic comment
|
||||
delimiters can only match each other.
|
||||
|
||||
This syntax class is primarily meant for use with the
|
||||
@code{syntax-table} text property (@pxref{Syntax Properties}). You
|
||||
@ -268,10 +269,11 @@ first and last characters of the range @code{syntax-table} properties
|
||||
identifying them as generic comment delimiters.
|
||||
|
||||
@item Generic string delimiters: @samp{|}
|
||||
Characters that start or end a string. This class differs from the
|
||||
string quote class in that @emph{any} generic string delimiter can
|
||||
match any other generic string delimiter; but they do not match
|
||||
ordinary string quote characters.
|
||||
(This syntax class is also known as ``string-fence''.) Characters
|
||||
that start or end a string. This class differs from the string quote
|
||||
class in that @emph{any} generic string delimiter can match any other
|
||||
generic string delimiter; but they do not match ordinary string quote
|
||||
characters.
|
||||
|
||||
This syntax class is primarily meant for use with the
|
||||
@code{syntax-table} text property (@pxref{Syntax Properties}). You
|
||||
|
25
src/syntax.c
25
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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user