* src/lex.c (parse_percent_token): Be sure to 0-end token_buffer

before returning.
Reported by Benoit Perrot.
This commit is contained in:
Akim Demaille
2002-03-04 12:06:07 +00:00
parent f9abaa2c4c
commit 550245801e
3 changed files with 38 additions and 35 deletions

View File

@@ -1,3 +1,9 @@
2002-03-04 Akim Demaille <akim@epita.fr>
* src/lex.c (parse_percent_token): Be sure to 0-end token_buffer
before returning.
Reported by Benoit Perrot.
2002-03-04 Akim Demaille <akim@epita.fr> 2002-03-04 Akim Demaille <akim@epita.fr>
Use bitset operations when possible, not loops over bits. Use bitset operations when possible, not loops over bits.

1
THANKS
View File

@@ -7,6 +7,7 @@ Albert Chin-A-Young china@thewrittenword.com
Alexander Belopolsky alexb@rentec.com Alexander Belopolsky alexb@rentec.com
Andreas Schwab schwab@suse.de Andreas Schwab schwab@suse.de
Arnold Robbins arnold@skeeve.com Arnold Robbins arnold@skeeve.com
Benoit Perrot benoit.perrot@epita.fr
Bruce Lilly blilly@erols.com Bruce Lilly blilly@erols.com
Cris van Pelt cris@amf03054.office.wxs.nl Cris van Pelt cris@amf03054.office.wxs.nl
Daniel Hagerty hag@gnu.org Daniel Hagerty hag@gnu.org

View File

@@ -485,45 +485,41 @@ parse_percent_token (void)
obstack_1grow (&token_obstack, '%'); obstack_1grow (&token_obstack, '%');
obstack_1grow (&token_obstack, c); obstack_1grow (&token_obstack, c);
if (!isalpha (c))
{
obstack_1grow (&token_obstack, '\0');
token_buffer = obstack_finish (&token_obstack);
switch (c) switch (c)
{ {
case '%': case '%':
token_buffer = obstack_finish (&token_obstack);
return tok_two_percents; return tok_two_percents;
case '{': case '{':
token_buffer = obstack_finish (&token_obstack);
return tok_percent_left_curly; return tok_percent_left_curly;
/* The following guys are here for backward compatibility with /* The following guys are here for backward compatibility with
very ancient Yacc versions. The paper of Johnson mentions very ancient Yacc versions. The paper of Johnson mentions
them (as ancient :). */ them (as ancient :). */
case '<': case '<':
token_buffer = obstack_finish (&token_obstack);
return tok_left; return tok_left;
case '>': case '>':
token_buffer = obstack_finish (&token_obstack);
return tok_right; return tok_right;
case '2': case '2':
token_buffer = obstack_finish (&token_obstack);
return tok_nonassoc; return tok_nonassoc;
case '0': case '0':
token_buffer = obstack_finish (&token_obstack);
return tok_token; return tok_token;
case '=': case '=':
token_buffer = obstack_finish (&token_obstack);
return tok_prec; return tok_prec;
}
if (!isalpha (c)) default:
{
token_buffer = obstack_finish (&token_obstack);
return tok_illegal; return tok_illegal;
} }
}
while (c = getc (finput), isalpha (c) || c == '_' || c == '-') while (c = getc (finput), isalpha (c) || c == '_' || c == '-')
{ {