xml: beware of user strings used to give a %prec to rules.

* tests/conflicts.at (%prec with user strings): New.
	* src/gram.c (grammar_rules_print_xml): Escape the precedence for
	XML output.
This commit is contained in:
Akim Demaille
2009-06-11 14:45:10 +02:00
parent 04d1e39dd3
commit 44bb908485
3 changed files with 30 additions and 5 deletions

View File

@@ -1,3 +1,10 @@
2009-06-11 Akim Demaille <demaille@gostai.com>
xml: beware of user strings used to give a %prec to rules.
* tests/conflicts.at (%prec with user strings): New.
* src/gram.c (grammar_rules_print_xml): Escape the precedence for
XML output.
2009-06-11 Akim Demaille <demaille@gostai.com> 2009-06-11 Akim Demaille <demaille@gostai.com>
hash: check insertion for memory exhaustion. hash: check insertion for memory exhaustion.

View File

@@ -1,7 +1,7 @@
/* Allocate input grammar variables for Bison. /* Allocate input grammar variables for Bison.
Copyright (C) 1984, 1986, 1989, 2001, 2002, 2003, 2005, 2006 Copyright (C) 1984, 1986, 1989, 2001, 2002, 2003, 2005, 2006
2007, 2008 Free Software Foundation, Inc. 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -224,7 +224,8 @@ grammar_rules_print_xml (FILE *out, int level)
fprintf (out, "<rule number=\"%d\" usefulness=\"%s\"", fprintf (out, "<rule number=\"%d\" usefulness=\"%s\"",
rules[r].number, usefulness); rules[r].number, usefulness);
if (rules[r].precsym) if (rules[r].precsym)
fprintf (out, " percent_prec=\"%s\"", rules[r].precsym->tag); fprintf (out, " percent_prec=\"%s\"",
xml_escape (rules[r].precsym->tag));
fputs (">\n", out); fputs (">\n", out);
} }
rule_lhs_print_xml (&rules[r], out, level + 3); rule_lhs_print_xml (&rules[r], out, level + 3);

View File

@@ -600,9 +600,26 @@ input.y: expected 0 reduce/reduce conflicts
AT_CLEANUP AT_CLEANUP
## ------------------------------- ## ## ------------------------- ##
## %no-default-prec without %prec ## ## %prec with user strings. ##
## ------------------------------- ## ## ------------------------- ##
AT_SETUP([%prec with user string])
AT_DATA([[input.y]],
[[%%
exp:
"foo" %prec "foo"
;
]])
AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
## -------------------------------- ##
## %no-default-prec without %prec. ##
## -------------------------------- ##
AT_SETUP([%no-default-prec without %prec]) AT_SETUP([%no-default-prec without %prec])