1
0
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:
Eli Zaretskii 2020-09-19 19:54:01 +03:00
parent fd1fe1e1ec
commit df04f3e755
2 changed files with 24 additions and 19 deletions

View File

@ -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

View File

@ -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)
{