From 44bb9084856ec2c421c91e1e1bd0f20437ce83b8 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 11 Jun 2009 14:45:10 +0200 Subject: [PATCH 3/4] 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. --- ChangeLog | 7 +++++++ src/gram.c | 5 +++-- tests/conflicts.at | 23 ++++++++++++++++++++--- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 44db35c..0147e0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-06-11 Akim Demaille + 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 + hash: check insertion for memory exhaustion. * src/muscle-tab.c (muscle_insert, muscle_grow) * src/state.c (state_hash_insert): Check the return value of diff --git a/src/gram.c b/src/gram.c index 725293b..b2a0cb7 100644 --- a/src/gram.c +++ b/src/gram.c @@ -1,7 +1,7 @@ /* Allocate input grammar variables for Bison. 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. @@ -224,7 +224,8 @@ grammar_rules_print_xml (FILE *out, int level) fprintf (out, "tag); + fprintf (out, " percent_prec=\"%s\"", + xml_escape (rules[r].precsym->tag)); fputs (">\n", out); } rule_lhs_print_xml (&rules[r], out, level + 3); diff --git a/tests/conflicts.at b/tests/conflicts.at index 4c046dc..f91be51 100644 --- a/tests/conflicts.at +++ b/tests/conflicts.at @@ -600,9 +600,26 @@ input.y: expected 0 reduce/reduce conflicts 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]) -- 1.6.3.2