fix dereferencing freed memory

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@23795 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Luigi Rizzo 2006-05-01 00:02:12 +00:00
parent 595955ea98
commit 2c2f7e817b
2 changed files with 54 additions and 52 deletions

View File

@ -574,11 +574,11 @@ static const unsigned short int yyrline[] =
426, 428, 431, 433, 435, 438, 438, 471, 472, 473, 426, 428, 431, 433, 435, 438, 438, 471, 472, 473,
474, 478, 482, 486, 489, 490, 495, 496, 499, 502, 474, 478, 482, 486, 489, 490, 495, 496, 499, 502,
506, 510, 514, 521, 524, 527, 534, 541, 548, 557, 506, 510, 514, 521, 524, 527, 534, 541, 548, 557,
557, 562, 570, 570, 580, 587, 590, 591, 594, 595, 557, 562, 570, 570, 581, 588, 591, 592, 595, 596,
598, 604, 605, 610, 614, 618, 622, 625, 628, 633, 599, 605, 606, 611, 615, 619, 623, 626, 629, 634,
634, 639, 640, 646, 651, 656, 657, 660, 663, 668, 635, 640, 641, 647, 652, 657, 658, 661, 664, 669,
671, 674, 688, 697, 702, 717, 729, 732, 733, 736, 672, 675, 689, 698, 703, 718, 730, 733, 734, 737,
739 740
}; };
#endif #endif
@ -2706,16 +2706,17 @@ yyreduce:
#line 570 "ael.y" #line 570 "ael.y"
{ {
if (strcasecmp((yyvsp[-2].str),"goto") == 0) { if (strcasecmp((yyvsp[-2].str),"goto") == 0) {
(yyval.pval)= npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[0])); (yyval.pval) = npval2(PV_GOTO, &(yylsp[-2]), &(yylsp[-1]));
free((yyvsp[-2].str)); /* won't be using this */ free((yyvsp[-2].str)); /* won't be using this */
ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Suggestion: Use the goto statement instead of the Goto() application call in AEL.\n", my_file, (yylsp[-2]).first_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column ); ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Suggestion: Use the goto statement instead of the Goto() application call in AEL.\n", my_file, (yylsp[-2]).first_line, (yylsp[-2]).first_column, (yylsp[-2]).last_column );
} else } else {
(yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[-2]), &(yylsp[0])); (yyval.pval)= npval2(PV_APPLICATION_CALL, &(yylsp[-2]), &(yylsp[-1]));
(yyval.pval)->u1.str = (yyvsp[-2].str); ;} (yyval.pval)->u1.str = (yyvsp[-2].str);
} ;}
break; break;
case 114: case 114:
#line 580 "ael.y" #line 581 "ael.y"
{ {
(yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[0])); (yyval.pval) = update_last((yyvsp[-2].pval), &(yylsp[0]));
if( (yyval.pval)->type == PV_GOTO ) if( (yyval.pval)->type == PV_GOTO )
@ -2726,34 +2727,34 @@ yyreduce:
break; break;
case 115: case 115:
#line 587 "ael.y" #line 588 "ael.y"
{ (yyval.pval) = update_last((yyvsp[-1].pval), &(yylsp[0])); ;} { (yyval.pval) = update_last((yyvsp[-1].pval), &(yylsp[0])); ;}
break; break;
case 116: case 116:
#line 590 "ael.y" #line 591 "ael.y"
{ (yyval.str) = (yyvsp[0].str) ;} { (yyval.str) = (yyvsp[0].str) ;}
break; break;
case 117: case 117:
#line 591 "ael.y" #line 592 "ael.y"
{ (yyval.str) = strdup(""); ;} { (yyval.str) = strdup(""); ;}
break; break;
case 118: case 118:
#line 594 "ael.y" #line 595 "ael.y"
{ (yyval.pval) = nword((yyvsp[0].str), &(yylsp[0])); ;} { (yyval.pval) = nword((yyvsp[0].str), &(yylsp[0])); ;}
break; break;
case 119: case 119:
#line 595 "ael.y" #line 596 "ael.y"
{ {
(yyval.pval)= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/); (yyval.pval)= npval(PV_WORD,0/*@1.first_line*/,0/*@1.last_line*/,0/* @1.first_column*/, 0/*@1.last_column*/);
(yyval.pval)->u1.str = strdup(""); ;} (yyval.pval)->u1.str = strdup(""); ;}
break; break;
case 120: case 120:
#line 598 "ael.y" #line 599 "ael.y"
{ {
pval *z = nword((yyvsp[0].str), &(yylsp[0])); pval *z = nword((yyvsp[0].str), &(yylsp[0]));
(yyval.pval) = (yyvsp[-2].pval); (yyval.pval) = (yyvsp[-2].pval);
@ -2761,19 +2762,19 @@ yyreduce:
break; break;
case 121: case 121:
#line 604 "ael.y" #line 605 "ael.y"
{(yyval.pval)=(yyvsp[0].pval);;} {(yyval.pval)=(yyvsp[0].pval);;}
break; break;
case 122: case 122:
#line 605 "ael.y" #line 606 "ael.y"
{ if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));} { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);} else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;} else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
break; break;
case 123: case 123:
#line 610 "ael.y" #line 611 "ael.y"
{ {
(yyval.pval) = npval2(PV_CASE, &(yylsp[-3]), &(yylsp[-1])); /* XXX 3 or 4 ? */ (yyval.pval) = npval2(PV_CASE, &(yylsp[-3]), &(yylsp[-1])); /* XXX 3 or 4 ? */
(yyval.pval)->u1.str = (yyvsp[-2].str); (yyval.pval)->u1.str = (yyvsp[-2].str);
@ -2781,7 +2782,7 @@ yyreduce:
break; break;
case 124: case 124:
#line 614 "ael.y" #line 615 "ael.y"
{ {
(yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-2]), &(yylsp[0])); (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-2]), &(yylsp[0]));
(yyval.pval)->u1.str = NULL; (yyval.pval)->u1.str = NULL;
@ -2789,7 +2790,7 @@ yyreduce:
break; break;
case 125: case 125:
#line 618 "ael.y" #line 619 "ael.y"
{ {
(yyval.pval) = npval2(PV_PATTERN, &(yylsp[-3]), &(yylsp[0])); /* XXX@3 or @4 ? */ (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-3]), &(yylsp[0])); /* XXX@3 or @4 ? */
(yyval.pval)->u1.str = (yyvsp[-2].str); (yyval.pval)->u1.str = (yyvsp[-2].str);
@ -2797,45 +2798,45 @@ yyreduce:
break; break;
case 126: case 126:
#line 622 "ael.y" #line 623 "ael.y"
{ {
(yyval.pval) = npval2(PV_CASE, &(yylsp[-2]), &(yylsp[0])); (yyval.pval) = npval2(PV_CASE, &(yylsp[-2]), &(yylsp[0]));
(yyval.pval)->u1.str = (yyvsp[-1].str);;} (yyval.pval)->u1.str = (yyvsp[-1].str);;}
break; break;
case 127: case 127:
#line 625 "ael.y" #line 626 "ael.y"
{ {
(yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-1]), &(yylsp[0])); (yyval.pval) = npval2(PV_DEFAULT, &(yylsp[-1]), &(yylsp[0]));
(yyval.pval)->u1.str = NULL;;} (yyval.pval)->u1.str = NULL;;}
break; break;
case 128: case 128:
#line 628 "ael.y" #line 629 "ael.y"
{ {
(yyval.pval) = npval2(PV_PATTERN, &(yylsp[-2]), &(yylsp[0])); (yyval.pval) = npval2(PV_PATTERN, &(yylsp[-2]), &(yylsp[0]));
(yyval.pval)->u1.str = (yyvsp[-1].str);;} (yyval.pval)->u1.str = (yyvsp[-1].str);;}
break; break;
case 129: case 129:
#line 633 "ael.y" #line 634 "ael.y"
{(yyval.pval) = (yyvsp[0].pval);;} {(yyval.pval) = (yyvsp[0].pval);;}
break; break;
case 130: case 130:
#line 634 "ael.y" #line 635 "ael.y"
{ if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));} { if ( (yyvsp[-1].pval) && (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[-1].pval); linku1((yyval.pval),(yyvsp[0].pval));}
else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);} else if ( (yyvsp[-1].pval) ) {(yyval.pval)=(yyvsp[-1].pval);}
else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;} else if ( (yyvsp[0].pval) ) {(yyval.pval)=(yyvsp[0].pval);} ;}
break; break;
case 131: case 131:
#line 639 "ael.y" #line 640 "ael.y"
{(yyval.pval)=(yyvsp[0].pval);;} {(yyval.pval)=(yyvsp[0].pval);;}
break; break;
case 132: case 132:
#line 640 "ael.y" #line 641 "ael.y"
{ {
(yyval.pval) = npval2(PV_CATCH, &(yylsp[-4]), &(yylsp[0])); (yyval.pval) = npval2(PV_CATCH, &(yylsp[-4]), &(yylsp[0]));
(yyval.pval)->u1.str = (yyvsp[-3].str); (yyval.pval)->u1.str = (yyvsp[-3].str);
@ -2843,38 +2844,38 @@ yyreduce:
break; break;
case 133: case 133:
#line 646 "ael.y" #line 647 "ael.y"
{ {
(yyval.pval) = npval2(PV_SWITCHES, &(yylsp[-1]), &(yylsp[0])); (yyval.pval) = npval2(PV_SWITCHES, &(yylsp[-1]), &(yylsp[0]));
(yyval.pval)->u1.list = (yyvsp[0].pval); ;} (yyval.pval)->u1.list = (yyvsp[0].pval); ;}
break; break;
case 134: case 134:
#line 651 "ael.y" #line 652 "ael.y"
{ {
(yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-1]), &(yylsp[0])); (yyval.pval) = npval2(PV_ESWITCHES, &(yylsp[-1]), &(yylsp[0]));
(yyval.pval)->u1.list = (yyvsp[0].pval); ;} (yyval.pval)->u1.list = (yyvsp[0].pval); ;}
break; break;
case 135: case 135:
#line 656 "ael.y" #line 657 "ael.y"
{ (yyval.pval) = (yyvsp[-1].pval); ;} { (yyval.pval) = (yyvsp[-1].pval); ;}
break; break;
case 136: case 136:
#line 657 "ael.y" #line 658 "ael.y"
{ (yyval.pval) = NULL; ;} { (yyval.pval) = NULL; ;}
break; break;
case 137: case 137:
#line 660 "ael.y" #line 661 "ael.y"
{ {
(yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); (yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
(yyval.pval)->u1.str = (yyvsp[-1].str);;} (yyval.pval)->u1.str = (yyvsp[-1].str);;}
break; break;
case 138: case 138:
#line 663 "ael.y" #line 664 "ael.y"
{ {
pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
z->u1.str = (yyvsp[-1].str); z->u1.str = (yyvsp[-1].str);
@ -2883,19 +2884,19 @@ yyreduce:
break; break;
case 139: case 139:
#line 668 "ael.y" #line 669 "ael.y"
{(yyval.pval)=(yyvsp[-1].pval);;} {(yyval.pval)=(yyvsp[-1].pval);;}
break; break;
case 140: case 140:
#line 671 "ael.y" #line 672 "ael.y"
{ {
(yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); (yyval.pval) = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0]));
(yyval.pval)->u1.str = (yyvsp[-1].str);;} (yyval.pval)->u1.str = (yyvsp[-1].str);;}
break; break;
case 141: case 141:
#line 675 "ael.y" #line 676 "ael.y"
{ {
(yyval.pval) = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12])); (yyval.pval) = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12]));
(yyval.pval)->u1.str = (yyvsp[-13].str); (yyval.pval)->u1.str = (yyvsp[-13].str);
@ -2912,7 +2913,7 @@ yyreduce:
break; break;
case 142: case 142:
#line 688 "ael.y" #line 689 "ael.y"
{ {
(yyval.pval) = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8])); (yyval.pval) = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8]));
(yyval.pval)->u1.str = (yyvsp[-9].str); (yyval.pval)->u1.str = (yyvsp[-9].str);
@ -2925,7 +2926,7 @@ yyreduce:
break; break;
case 143: case 143:
#line 697 "ael.y" #line 698 "ael.y"
{ {
pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); /* XXX don't we need @1-@3 ?*/ pval *z = npval2(PV_WORD, &(yylsp[-1]), &(yylsp[0])); /* XXX don't we need @1-@3 ?*/
(yyval.pval)=(yyvsp[-2].pval); (yyval.pval)=(yyvsp[-2].pval);
@ -2934,7 +2935,7 @@ yyreduce:
break; break;
case 144: case 144:
#line 703 "ael.y" #line 704 "ael.y"
{ {
pval *z = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12])); pval *z = npval2(PV_WORD, &(yylsp[-13]), &(yylsp[-12]));
(yyval.pval)=(yyvsp[-14].pval); z->u1.str = (yyvsp[-13].str); (yyval.pval)=(yyvsp[-14].pval); z->u1.str = (yyvsp[-13].str);
@ -2952,7 +2953,7 @@ yyreduce:
break; break;
case 145: case 145:
#line 717 "ael.y" #line 718 "ael.y"
{ {
pval *z = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8])); pval *z = npval2(PV_WORD, &(yylsp[-9]), &(yylsp[-8]));
(yyval.pval)=(yyvsp[-10].pval); (yyval.pval)=(yyvsp[-10].pval);
@ -2968,29 +2969,29 @@ yyreduce:
break; break;
case 146: case 146:
#line 729 "ael.y" #line 730 "ael.y"
{(yyval.pval)=(yyvsp[-1].pval);;} {(yyval.pval)=(yyvsp[-1].pval);;}
break; break;
case 147: case 147:
#line 732 "ael.y" #line 733 "ael.y"
{ (yyval.str) = (yyvsp[0].str);;} { (yyval.str) = (yyvsp[0].str);;}
break; break;
case 148: case 148:
#line 733 "ael.y" #line 734 "ael.y"
{(yyval.str)=strdup("default");;} {(yyval.str)=strdup("default");;}
break; break;
case 149: case 149:
#line 736 "ael.y" #line 737 "ael.y"
{ {
(yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-3]), &(yylsp[0])); (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-3]), &(yylsp[0]));
(yyval.pval)->u1.list = (yyvsp[-1].pval);;} (yyval.pval)->u1.list = (yyvsp[-1].pval);;}
break; break;
case 150: case 150:
#line 739 "ael.y" #line 740 "ael.y"
{ {
(yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-2]), &(yylsp[0]));;} (yyval.pval) = npval2(PV_INCLUDES, &(yylsp[-2]), &(yylsp[0]));;}
break; break;
@ -3000,7 +3001,7 @@ yyreduce:
} }
/* Line 1126 of yacc.c. */ /* Line 1126 of yacc.c. */
#line 3004 "ael.tab.c" #line 3005 "ael.tab.c"
yyvsp -= yylen; yyvsp -= yylen;
yyssp -= yylen; yyssp -= yylen;
@ -3275,7 +3276,7 @@ yyreturn:
} }
#line 744 "ael.y" #line 745 "ael.y"
static char *token_equivs1[] = static char *token_equivs1[] =

View File

@ -569,12 +569,13 @@ macro_call : word LP {reset_argcount(parseio->scanner);} eval_arglist RP {
*/ */
application_call_head: word LP {reset_argcount(parseio->scanner);} { application_call_head: word LP {reset_argcount(parseio->scanner);} {
if (strcasecmp($1,"goto") == 0) { if (strcasecmp($1,"goto") == 0) {
$$= npval2(PV_GOTO, &@1, &@3); $$ = npval2(PV_GOTO, &@1, &@2);
free($1); /* won't be using this */ free($1); /* won't be using this */
ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Suggestion: Use the goto statement instead of the Goto() application call in AEL.\n", my_file, @1.first_line, @1.first_column, @1.last_column ); ast_log(LOG_WARNING, "==== File: %s, Line %d, Cols: %d-%d: Suggestion: Use the goto statement instead of the Goto() application call in AEL.\n", my_file, @1.first_line, @1.first_column, @1.last_column );
} else } else {
$$= npval2(PV_APPLICATION_CALL, &@1, &@3); $$= npval2(PV_APPLICATION_CALL, &@1, &@2);
$$->u1.str = $1; } $$->u1.str = $1;
} }
; ;
application_call : application_call_head eval_arglist RP { application_call : application_call_head eval_arglist RP {