mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 17:53:02 +00:00
When a literal string is used to define two different tokens,
`bison -v' segfaults. Reported by Piotr Gackiewicz, and fixed by Neil Booth. * tests/regression.m4: New file. Include the core of the sample provided by Piotr Gackiewicz. * src/reader.c (parse_token_decl): Diagnose bad cases, and proceed properly.
This commit is contained in:
11
ChangeLog
11
ChangeLog
@@ -1,3 +1,14 @@
|
|||||||
|
2000-10-04 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
When a literal string is used to define two different tokens,
|
||||||
|
`bison -v' segfaults.
|
||||||
|
Reported by Piotr Gackiewicz, and fixed by Neil Booth.
|
||||||
|
|
||||||
|
* tests/regression.m4: New file.
|
||||||
|
Include the core of the sample provided by Piotr Gackiewicz.
|
||||||
|
* src/reader.c (parse_token_decl): Diagnose bad cases, and proceed
|
||||||
|
properly.
|
||||||
|
|
||||||
2000-10-04 Akim Demaille <akim@epita.fr>
|
2000-10-04 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/reader.c (parse_expect_decl): Keep `count' within the size
|
* src/reader.c (parse_expect_decl): Keep `count' within the size
|
||||||
|
|||||||
1
THANKS
1
THANKS
@@ -5,6 +5,7 @@ Jim Meyering meyering@gnu.org
|
|||||||
Neil Booth NeilB@earthling.net
|
Neil Booth NeilB@earthling.net
|
||||||
Noah Friedman friedman@gnu.org
|
Noah Friedman friedman@gnu.org
|
||||||
Paul Eggert eggert@twinsun.com
|
Paul Eggert eggert@twinsun.com
|
||||||
|
Piotr Gackiewicz gacek@intertel.com.pl
|
||||||
Richard Stallman rms@gnu.org
|
Richard Stallman rms@gnu.org
|
||||||
|
|
||||||
Many people are not named here because we lost track of them. We
|
Many people are not named here because we lost track of them. We
|
||||||
|
|||||||
28
src/reader.c
28
src/reader.c
@@ -372,17 +372,25 @@ parse_token_decl (symbol_class what_is, symbol_class what_is_not)
|
|||||||
}
|
}
|
||||||
else if (token == IDENTIFIER && *symval->tag == '\"' && symbol)
|
else if (token == IDENTIFIER && *symval->tag == '\"' && symbol)
|
||||||
{
|
{
|
||||||
|
if (symval->alias)
|
||||||
|
warn (_("symbol `%s' used more than once as a literal string"),
|
||||||
|
symval->tag);
|
||||||
|
else if (symbol->alias)
|
||||||
|
warn (_("symbol `%s' given more than one literal string"),
|
||||||
|
symbol->tag);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
symval->class = token_sym;
|
||||||
|
symval->type_name = typename;
|
||||||
|
symval->user_token_number = symbol->user_token_number;
|
||||||
|
symbol->user_token_number = SALIAS;
|
||||||
|
symval->alias = symbol;
|
||||||
|
symbol->alias = symval;
|
||||||
|
/* symbol and symval combined are only one symbol */
|
||||||
|
nsyms--;
|
||||||
|
}
|
||||||
translations = 1;
|
translations = 1;
|
||||||
symval->class = token_sym;
|
symbol = NULL;
|
||||||
symval->type_name = typename;
|
|
||||||
symval->user_token_number = symbol->user_token_number;
|
|
||||||
symbol->user_token_number = SALIAS;
|
|
||||||
|
|
||||||
symval->alias = symbol;
|
|
||||||
symbol->alias = symval;
|
|
||||||
symbol = NULL;
|
|
||||||
|
|
||||||
nsyms--; /* symbol and symval combined are only one symbol */
|
|
||||||
}
|
}
|
||||||
else if (token == IDENTIFIER)
|
else if (token == IDENTIFIER)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
# Distribute the testsuite since GNU M4 is needed to build it.
|
# Distribute the testsuite since GNU M4 is needed to build it.
|
||||||
noinst_SCRIPTS = testsuite
|
noinst_SCRIPTS = testsuite
|
||||||
|
|
||||||
SUITE = calc.m4
|
SUITE = calc.m4 regression.m4
|
||||||
|
|
||||||
EXTRA_DIST = atgeneral.m4 suite.m4 $(SUITE)
|
EXTRA_DIST = atgeneral.m4 suite.m4 $(SUITE)
|
||||||
|
|
||||||
|
|||||||
26
tests/regression.m4
Normal file
26
tests/regression.m4
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# -*- Autoconf -*-
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
Regression tests.
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
AT_SETUP(Duplicate string)
|
||||||
|
|
||||||
|
AT_DATA([duplicate.y],
|
||||||
|
[[/* `Bison -v' used to dump core when two tokens are defined with the same
|
||||||
|
string, as LE and GE below. */
|
||||||
|
|
||||||
|
%token NUM
|
||||||
|
%token LE "<="
|
||||||
|
%token GE "<="
|
||||||
|
|
||||||
|
%%
|
||||||
|
exp: '(' exp ')' | NUM ;
|
||||||
|
%%
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_CHECK([bison -v duplicate.y -o duplicate.c], 0, ignore, ignore)
|
||||||
|
|
||||||
|
AT_CLEANUP(duplicate.*)
|
||||||
@@ -5,3 +5,4 @@
|
|||||||
AT_INIT([bison])
|
AT_INIT([bison])
|
||||||
|
|
||||||
AT_INCLUDE([calc.m4])
|
AT_INCLUDE([calc.m4])
|
||||||
|
AT_INCLUDE([regression.m4])
|
||||||
|
|||||||
Reference in New Issue
Block a user