Module: sip-router Branch: kamailio_3.0 Commit: cee359fdc0bd85b85dc170c61ca296a3f13b0639 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cee359fd...
Author: Andrei Pelinescu-Onciul andrei@iptel.org Committer: Daniel-Constantin Mierla miconda@gmail.com Date: Wed Feb 24 15:13:12 2010 +0100
cfg parser: segfault on case RE parse error fix
Reported-by: Klaus Feichtinger klaus.feichtinger gmx net (cherry picked from commit d2871c1190291e4b801f42e0763e5ca7ea28ee36)
---
cfg.y | 21 +++++++++++++-------- 1 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/cfg.y b/cfg.y index c618a52..f535d98 100644 --- a/cfg.y +++ b/cfg.y @@ -2239,12 +2239,14 @@ if_cmd:
ct_rval: rval_expr { $$=0; - if (!rve_is_constant($1)){ + if ($1 && !rve_is_constant($1)){ yyerror("constant expected"); + YYERROR; /* - } else if (!rve_check_type((enum rval_type*)&i_tmp, $1, 0, 0 ,0)){ + } else if ($1 && + !rve_check_type((enum rval_type*)&i_tmp, $1, 0, 0 ,0)){ yyerror("invalid expression (bad type)"); - }else if (i_tmp!=RV_INT){ + }else if ($1 && i_tmp!=RV_INT){ yyerror("invalid expression type, int expected\n"); */ }else @@ -2254,28 +2256,28 @@ ct_rval: rval_expr { single_case: CASE ct_rval COLON actions { $$=0; - if ($2==0) yyerror ("bad case label"); + if ($2==0) { yyerror ("bad case label"); YYERROR; } else if ((($$=mk_case_stm($2, 0, $4, &i_tmp))==0) && (i_tmp==-10)){ YYABORT; } } | CASE SLASH ct_rval COLON actions { $$=0; - if ($3==0) yyerror ("bad case label"); + if ($3==0) { yyerror ("bad case label"); YYERROR; } else if ((($$=mk_case_stm($3, 1, $5, &i_tmp))==0) && (i_tmp==-10)){ YYABORT; } } | CASE ct_rval COLON { $$=0; - if ($2==0) yyerror ("bad case label"); + if ($2==0) { yyerror ("bad case label"); YYERROR; } else if ((($$=mk_case_stm($2, 0, 0, &i_tmp))==0) && (i_tmp==-10)){ YYABORT; } } | CASE SLASH ct_rval COLON { $$=0; - if ($3==0) yyerror ("bad case label"); + if ($3==0) { yyerror ("bad regex case label"); YYERROR; } else if ((($$=mk_case_stm($3, 1, 0, &i_tmp))==0) && (i_tmp==-10)){ YYABORT; } @@ -2290,7 +2292,10 @@ single_case: YYABORT; } } - | CASE error { $$=0; yyerror("bad case label"); } + | CASE error COLON actions { $$=0; yyerror("bad case label"); } + | CASE SLASH error COLON actions { $$=0; yyerror("bad case regex label"); } + | CASE error COLON { $$=0; yyerror("bad case label"); } + | CASE SLASH error COLON { $$=0; yyerror("bad case regex label"); } | CASE ct_rval COLON error { $$=0; yyerror ("bad case body"); } ; case_stms: