From 5d31a2162dc41b71b9de73a3acb7fcba6fb8e7f3 Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" <jdenny@ces.clemson.edu> Date: Sat, 11 Aug 2007 23:08:04 +0000 Subject: [PATCH] * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Do not name user variables starting with `yy'. Just pass NULL instead of a dummy local &yylval to yypush_parse. * tests/torture.at (AT_DATA_STACK_TORTURE): Do not name user variables starting with `yy'. --- ChangeLog | 8 ++++++++ tests/push.at | 34 ++++++++++++++++------------------ tests/torture.at | 6 +++--- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6076bb5c..ffb7d5c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-08-11 Joel E. Denny <jdenny@ces.clemson.edu> + + * tests/push.at (Push Parsing: Memory Leak for Early Deletion): Do not + name user variables starting with `yy'. Just pass NULL instead of a + dummy local &yylval to yypush_parse. + * tests/torture.at (AT_DATA_STACK_TORTURE): Do not name user variables + starting with `yy'. + 2007-08-03 Joel E. Denny <jdenny@ces.clemson.edu> * data/yacc.c (yyexhaustedlab): Define it when YYERROR_VERBOSE is diff --git a/tests/push.at b/tests/push.at index 62593d3e..4a986290 100644 --- a/tests/push.at +++ b/tests/push.at @@ -52,24 +52,22 @@ yyerror (char const *msg) int main (void) { - yypstate *yyps; - YYSTYPE yylval; - - /* Make sure we don't try to free yyps->yyss in this case. */ - yyps = yypstate_new (); - yypstate_delete (yyps); - - /* yypstate_delete used to leak yyps->yyss if the stack was reallocated but - the parse did not return on success, syntax error, or memory - exhaustion. */ - yyps = yypstate_new (); - assert (yypush_parse (yyps, 'a', &yylval) == YYPUSH_MORE); - yypstate_delete (yyps); - - yyps = yypstate_new (); - assert (yypush_parse (yyps, 'a', &yylval) == YYPUSH_MORE); - assert (yypush_parse (yyps, 'b', &yylval) == YYPUSH_MORE); - yypstate_delete (yyps); + yypstate *ps; + + /* Make sure we don't try to free ps->yyss in this case. */ + ps = yypstate_new (); + yypstate_delete (ps); + + /* yypstate_delete used to leak ps->yyss if the stack was reallocated but the + parse did not return on success, syntax error, or memory exhaustion. */ + ps = yypstate_new (); + assert (yypush_parse (ps, 'a', NULL) == YYPUSH_MORE); + yypstate_delete (ps); + + ps = yypstate_new (); + assert (yypush_parse (ps, 'a', NULL) == YYPUSH_MORE); + assert (yypush_parse (ps, 'b', NULL) == YYPUSH_MORE); + yypstate_delete (ps); return 0; } diff --git a/tests/torture.at b/tests/torture.at index 99a4245e..8874f101 100644 --- a/tests/torture.at +++ b/tests/torture.at @@ -444,13 +444,13 @@ main (int argc, const char **argv) int count; int status; ]m4_bmatch([$2], [%push-], -[[ yypstate *yyps = yypstate_new (); +[[ yypstate *ps = yypstate_new (); ]])[ for (count = 0; count < 2; ++count) { int new_status; yylval = yylval_init; ]m4_bmatch([$2], [%push-], -[[ new_status = yypull_parse (yyps); +[[ new_status = yypull_parse (ps); ]], [[ new_status = yyparse (); ]])[ if (count > 0 && new_status != status) @@ -458,7 +458,7 @@ main (int argc, const char **argv) status = new_status; } ]m4_bmatch([$2], [%push-], -[[ yypstate_delete (yyps); +[[ yypstate_delete (ps); ]])[ return status; } } -- 2.45.2