From 194998f397a092296123a258b3b8162797ac8cf5 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Wed, 6 May 2015 19:49:23 -0700 Subject: [PATCH] corner-case bug fixes for put, filter, step --- c/dsls/filter_dsl_lexer.l | 4 ++-- c/dsls/put_dsl_lexer.l | 4 ++-- c/mapping/mapper_filter.c | 4 ++++ c/mapping/mapper_put.c | 4 ++++ c/mapping/mapper_step.c | 6 +++++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/c/dsls/filter_dsl_lexer.l b/c/dsls/filter_dsl_lexer.l index 36cce517b..581509395 100644 --- a/c/dsls/filter_dsl_lexer.l +++ b/c/dsls/filter_dsl_lexer.l @@ -78,7 +78,7 @@ return FILTER_DSL_NOT; } -\$[a-zA-Z_0-9]* { +\$[a-zA-Z_0-9]+ { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FIELD_NAME); @@ -125,7 +125,7 @@ return FILTER_DSL_RPAREN; } -[a-zA-Z_][a-zA-Z_0-9]* { +[a-zA-Z_][a-zA-Z_0-9]+ { *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME); return FILTER_DSL_FCN_NAME; } diff --git a/c/dsls/put_dsl_lexer.l b/c/dsls/put_dsl_lexer.l index c8d5344ef..cfccc5116 100644 --- a/c/dsls/put_dsl_lexer.l +++ b/c/dsls/put_dsl_lexer.l @@ -11,7 +11,7 @@ %option extra-type="struct _mlr_dsl_ast_node_t **" %% -\$[a-zA-Z_0-9]* { +\$[a-zA-Z_0-9]+ { // Note: the parser depends on the dollar sign being here. If this is changed, // that needs to be changed as well. *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FIELD_NAME); @@ -43,7 +43,7 @@ return PUT_DSL_CONTEXT_VARIABLE; } -[a-zA-Z_][a-zA-Z_0-9]* { +[a-zA-Z_][a-zA-Z_0-9]+ { *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME); return PUT_DSL_FCN_NAME; } diff --git a/c/mapping/mapper_filter.c b/c/mapping/mapper_filter.c index e0fa0d028..f5ff2b96a 100644 --- a/c/mapping/mapper_filter.c +++ b/c/mapping/mapper_filter.c @@ -80,6 +80,10 @@ mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv) { mlr_dsl_expression = argv[(*pargi)++]; mlr_dsl_ast_node_holder_t* past = filter_dsl_parse(mlr_dsl_expression); + if (past == NULL) { + mapper_filter_usage(argv[0], verb); + return NULL; + } if (print_asts) { mlr_dsl_ast_node_print(past->proot); } diff --git a/c/mapping/mapper_put.c b/c/mapping/mapper_put.c index d331d4efd..816a918f4 100644 --- a/c/mapping/mapper_put.c +++ b/c/mapping/mapper_put.c @@ -115,6 +115,10 @@ mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv) { // Linked list of mlr_dsl_ast_node_t*. sllv_t* pasts = put_dsl_parse(mlr_dsl_expression); + if (pasts == NULL) { + mapper_put_usage(argv[0], verb); + return NULL; + } if (print_asts) { for (sllve_t* pe = pasts->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_print(pe->pvdata); diff --git a/c/mapping/mapper_step.c b/c/mapping/mapper_step.c index d359d543f..1a71a2bab 100644 --- a/c/mapping/mapper_step.c +++ b/c/mapping/mapper_step.c @@ -208,7 +208,11 @@ sllv_t* mapper_step_func(lrec_t* pinrec, context_t* pctx, void* pvstate) { step_t* pstep = lhmsv_get(pmaps_level_3, step_name); if (pstep == NULL) { pstep = make_step(step_name, value_field_name, &pctx->statx); - // xxx fix me when lookup is null; and/or check at ctor time + if (pstep == NULL) { + fprintf(stderr, "mlr step: stepper \"%s\" not found.\n", + step_name); + exit(1); + } lhmsv_put(pmaps_level_3, step_name, pstep); }