From 87579e03e02c7521ca3bb6ce03a0469339b9d5ce Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 6 Apr 2020 18:37:51 +0200 Subject: [PATCH] skeletons: beware not to use yyarg when it's null Reported by Adrian Vogelsgesang. * data/skeletons/glr.c, data/skeletons/lalr1.cc, * data/skeletons/lalr1.java, data/skeletons/yacc.c: Here. --- TODO | 3 --- data/skeletons/glr.c | 4 +++- data/skeletons/lalr1.cc | 3 ++- data/skeletons/lalr1.java | 4 +++- data/skeletons/yacc.c | 4 +++- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/TODO b/TODO index 6d5a1480..1e589ddc 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,4 @@ * Bison 3.6 -** syntax_error_arguments -Don't store the lookahead if !argv. - ** Documentation - yyexpected_tokens in all the languages. - YYNOMEM diff --git a/data/skeletons/glr.c b/data/skeletons/glr.c index f5d51bb1..c17e7208 100644 --- a/data/skeletons/glr.c +++ b/data/skeletons/glr.c @@ -2188,7 +2188,9 @@ yy_syntax_error_arguments (const yyGLRStack* yystackp, if (yytoken != YYSYMBOL_YYEMPTY) { int yyn; - yyarg[yycount++] = yytoken; + if (yyarg) + yyarg[yycount] = yytoken; + ++yycount; yyn = yyexpected_tokens (yystackp, yyarg ? yyarg + 1 : yyarg, yyargn - 1); if (yyn == YYNOMEM) return YYNOMEM; diff --git a/data/skeletons/lalr1.cc b/data/skeletons/lalr1.cc index 104009c9..7dfb63f7 100644 --- a/data/skeletons/lalr1.cc +++ b/data/skeletons/lalr1.cc @@ -1458,7 +1458,8 @@ b4_dollar_popdef])[]dnl if (!yyctx.lookahead ().empty ()) { - yyarg[0] = yyctx.token (); + if (yyarg) + yyarg[0] = yyctx.token (); int yyn = yyctx.yyexpected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1); return yyn + 1; } diff --git a/data/skeletons/lalr1.java b/data/skeletons/lalr1.java index 58957a2d..529da270 100644 --- a/data/skeletons/lalr1.java +++ b/data/skeletons/lalr1.java @@ -981,7 +981,9 @@ b4_dollar_popdef[]dnl int yycount = 0; if (yyctx.getToken () != null) { - yyarg[yycount++] = yyctx.getToken (); + if (yyarg != null) + yyarg[yycount] = yyctx.getToken (); + yycount += 1; yycount += yyctx.getExpectedTokens (yyarg, 1, yyargn); } return yycount; diff --git a/data/skeletons/yacc.c b/data/skeletons/yacc.c index 99d99ff4..98612a73 100644 --- a/data/skeletons/yacc.c +++ b/data/skeletons/yacc.c @@ -1360,7 +1360,9 @@ yy_syntax_error_arguments (const yypcontext_t *yyctx, { int yyn;]b4_lac_if([[ YYDPRINTF ((stderr, "Constructing syntax error message\n"));]])[ - yyarg[yycount++] = yyctx->yytoken; + if (yyarg) + yyarg[yycount] = yyctx->yytoken; + ++yycount; yyn = yyexpected_tokens (yyctx, yyarg ? yyarg + 1 : yyarg, yyargn - 1); if (yyn == YYNOMEM) return YYNOMEM;]b4_lac_if([[