diff options
-rw-r--r-- | src/buf.c | 2 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/parse.y | 4 |
3 files changed, 6 insertions, 2 deletions
@@ -166,7 +166,7 @@ struct Buf *buf_strdefine (struct Buf *buf, const char *str, const char *def) */ struct Buf *buf_m4_define (struct Buf *buf, const char* def, const char* val) { - const char * fmt = "m4_define( [[%s]], [[%s]])m4_dnl\n"; + const char * fmt = "m4_define( [[%s]], [[[[%s]]]])m4_dnl\n"; char * str; size_t strsz; @@ -445,6 +445,8 @@ void check_options (void) if ( bison_bridge_lloc) buf_m4_define (&m4defs_buf, "<M4_YY_BISON_LLOC>", NULL); + if (strchr(prefix, '[') || strchr(prefix, ']')) + flexerror(_("Prefix cannot include '[' or ']'")); buf_m4_define(&m4defs_buf, "M4_YY_PREFIX", prefix); if (did_outfilename) diff --git a/src/parse.y b/src/parse.y index 4de4151..8aed868 100644 --- a/src/parse.y +++ b/src/parse.y @@ -199,7 +199,9 @@ option : TOK_OUTFILE '=' NAME | TOK_EXTRA_TYPE '=' NAME { extra_type = xstrdup(nmstr); } | TOK_PREFIX '=' NAME - { prefix = xstrdup(nmstr); } + { prefix = xstrdup(nmstr); + if (strchr(prefix, '[') || strchr(prefix, ']')) + flexerror(_("Prefix must not contain [ or ]")); } | TOK_YYCLASS '=' NAME { yyclass = xstrdup(nmstr); } | TOK_HEADER_FILE '=' NAME |