[lttng-dev] [lttng-tools PATCH] Fix filter parser segmentation fault with bison 3.0
David Goulet
dgoulet at efficios.com
Fri Aug 16 11:25:40 EDT 2013
Ya sure! I was waiting for you Ack :)
David
Mathieu Desnoyers:
> * Zifei Tong (soariez at gmail.com) wrote:
>> Replace deprecated YYLEX_PARAM with %lex-param
>>
>> Tested with bison 2.7 and bison 3.0
>>
>> Signed-off-by: Zifei Tong <soariez at gmail.com>
>
> Acked-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
>
> David, can you take care of merging it ?
>
> Thanks,
>
> Mathieu
>
>> ---
>> src/lib/lttng-ctl/filter/filter-ast.h | 3 ---
>> src/lib/lttng-ctl/filter/filter-parser.y | 13 +++++++------
>> 2 files changed, 7 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/lib/lttng-ctl/filter/filter-ast.h b/src/lib/lttng-ctl/filter/filter-ast.h
>> index 4fb60d0..405c668 100644
>> --- a/src/lib/lttng-ctl/filter/filter-ast.h
>> +++ b/src/lib/lttng-ctl/filter/filter-ast.h
>> @@ -39,9 +39,6 @@
>> // data is a pointer to a 'SParserParam' structure
>> //#define YYPARSE_PARAM parser_ctx
>>
>> -// the argument for the 'yylex' function
>> -#define YYLEX_PARAM ((struct filter_parser_ctx *) parser_ctx)->scanner
>> -
>> #ifndef YY_TYPEDEF_YY_SCANNER_T
>> #define YY_TYPEDEF_YY_SCANNER_T
>> typedef void* yyscan_t;
>> diff --git a/src/lib/lttng-ctl/filter/filter-parser.y b/src/lib/lttng-ctl/filter/filter-parser.y
>> index 3f30134..29e2866 100644
>> --- a/src/lib/lttng-ctl/filter/filter-parser.y
>> +++ b/src/lib/lttng-ctl/filter/filter-parser.y
>> @@ -40,9 +40,9 @@ LTTNG_HIDDEN
>> int filter_parser_debug = 0;
>>
>> LTTNG_HIDDEN
>> -int yyparse(struct filter_parser_ctx *parser_ctx);
>> +int yyparse(struct filter_parser_ctx *parser_ctx, yyscan_t scanner);
>> LTTNG_HIDDEN
>> -int yylex(union YYSTYPE *yyval, struct filter_parser_ctx *parser_ctx);
>> +int yylex(union YYSTYPE *yyval, yyscan_t scanner);
>> LTTNG_HIDDEN
>> int yylex_init_extra(struct filter_parser_ctx *parser_ctx, yyscan_t * ptr_yy_globals);
>> LTTNG_HIDDEN
>> @@ -188,7 +188,7 @@ static struct filter_node *make_op_node(struct filter_parser_ctx *scanner,
>> }
>>
>> LTTNG_HIDDEN
>> -void yyerror(struct filter_parser_ctx *parser_ctx, const char *str)
>> +void yyerror(struct filter_parser_ctx *parser_ctx, yyscan_t scanner, const char *str)
>> {
>> fprintf(stderr, "error %s\n", str);
>> }
>> @@ -201,7 +201,7 @@ int yywrap(void)
>>
>> #define parse_error(parser_ctx, str) \
>> do { \
>> - yyerror(parser_ctx, YY_("parse error: " str "\n")); \
>> + yyerror(parser_ctx, parser_ctx->scanner, YY_("parse error: " str "\n")); \
>> YYERROR; \
>> } while (0)
>>
>> @@ -238,7 +238,7 @@ static void filter_ast_free(struct filter_ast *ast)
>> LTTNG_HIDDEN
>> int filter_parser_ctx_append_ast(struct filter_parser_ctx *parser_ctx)
>> {
>> - return yyparse(parser_ctx);
>> + return yyparse(parser_ctx, parser_ctx->scanner);
>> }
>>
>> LTTNG_HIDDEN
>> @@ -301,7 +301,8 @@ void filter_parser_ctx_free(struct filter_parser_ctx *parser_ctx)
>> %define api.pure
>> /* %locations */
>> %parse-param {struct filter_parser_ctx *parser_ctx}
>> -%lex-param {struct filter_parser_ctx *parser_ctx}
>> +%parse-param {yyscan_t scanner}
>> +%lex-param {yyscan_t scanner}
>> %start translation_unit
>> %token CHARACTER_CONSTANT_START SQUOTE STRING_LITERAL_START DQUOTE
>> %token ESCSEQ CHAR_STRING_TOKEN
>> --
>> 1.8.3.4
>>
>>
>> _______________________________________________
>> lttng-dev mailing list
>> lttng-dev at lists.lttng.org
>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
More information about the lttng-dev
mailing list