From a1b7fef045124971053edb0e6d570d0e15cb04f5 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 30 Aug 2020 09:45:34 +0200 Subject: [PATCH] c: always use YYMALLOC/YYFREE Reported by Kovalex . https://lists.gnu.org/r/bug-bison/2020-08/msg00015.html * data/skeletons/yacc.c: Don't make direct calls to malloc/free. * tests/calc.at: Check it. --- NEWS | 3 +++ data/skeletons/yacc.c | 4 ++-- tests/calc.at | 6 ++++++ tests/local.at | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 68bbbb81..a5c59f0d 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ GNU Bison NEWS * Noteworthy changes in release ?.? (????-??-??) [?] +** Bug fixes + + Push parsers use YYMALLOC/YYFREE instead of direct calls to malloc/free. * Noteworthy changes in release 3.7.1 (2020-08-02) [stable] diff --git a/data/skeletons/yacc.c b/data/skeletons/yacc.c index 9ec153ac..c695a039 100644 --- a/data/skeletons/yacc.c +++ b/data/skeletons/yacc.c @@ -1486,7 +1486,7 @@ yypstate_new (void) yypstate *yyps;]b4_pure_if([], [[ if (yypstate_allocated) return YY_NULLPTR;]])[ - yyps = YY_CAST (yypstate *, malloc (sizeof *yyps)); + yyps = YY_CAST (yypstate *, YYMALLOC (sizeof *yyps)); if (!yyps) return YY_NULLPTR;]b4_pure_if([], [[ yypstate_allocated = 1;]])[ @@ -1515,7 +1515,7 @@ yypstate_delete (yypstate *yyps) #endif]b4_lac_if([[ if (yyes != yyesa) YYSTACK_FREE (yyes);]])[ - free (yyps);]b4_pure_if([], [[ + YYFREE (yyps);]b4_pure_if([], [[ yypstate_allocated = 0;]])[ } } diff --git a/tests/calc.at b/tests/calc.at index ee75bf27..e24d6c83 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -915,6 +915,12 @@ AT_BISON_OPTION_PUSHDEFS([$1]) AT_DATA_CALC_Y([$1]) AT_FULL_COMPILE(AT_JAVA_IF([[Calc]], [[calc]]), AT_DEFINES_IF([[lex], [main]], [[], []]), [$2], [-Wno-deprecated]) + +AT_YACC_IF( + [# No direct calls to malloc/free. + AT_CHECK([[$EGREP '(malloc|free) *\(' calc.[ch] | $EGREP -v 'INFRINGES ON USER NAME SPACE']], + [1])]) + AT_PUSH_IF([AT_JAVA_IF( [# Verify that this is a push parser. AT_CHECK_JAVA_GREP([[Calc.java]], diff --git a/tests/local.at b/tests/local.at index 5465bd85..a4782362 100644 --- a/tests/local.at +++ b/tests/local.at @@ -390,6 +390,7 @@ AT_LOCATION_TYPE_SPAN_IF( AT_GLR_IF([AT_KEYWORDS([glr])]) +AT_PUSH_IF([AT_KEYWORDS([push])]) ])# _AT_BISON_OPTION_PUSHDEFS