Bug#507883: release critical
Lars Bensmann
lars at almosthappy.de
Wed Dec 10 12:14:59 UTC 2008
On Tue, Dec 09, 2008 at 11:29:30PM +0200, Tzafrir Cohen wrote:
> > It doesn't matter if the jump target is actually there. If I replace
> > 'foo|1' by 'blah|foo|1' or just '1' I don't have any problems. If I delete
> > the NoOp line the problem also disappears.
I tried to port the patch, but I failed. Asterisk compiles but core dumps on
startup (although this time it's not related to the extensions.ael I think.)
I attached the patch if someone wants to use it as a starting point.
I used
(cd ael; flex ael.flex; sed -i -e "/begin standard C headers/i#include \"asterisk.h\"" ael_lex.c)
(cd ael; sed 's@#if __STDC_VERSION__ >= 199901L@#if !defined __STDC_VERSION__ || __STDC_VERSION__ >= 199901L@' ael_lex.c > zz; mv zz ael_lex.c)
(as found in ael/Makefile) to regenerate ael_lex.c
--
Hardware:
The parts of a computer system that can be kicked.
-------------- next part --------------
diff -r -U3 ../asterisk-1.4.21.2~dfsg/include/asterisk/ael_structs.h ./include/asterisk/ael_structs.h
--- ../asterisk-1.4.21.2~dfsg/include/asterisk/ael_structs.h 2008-03-27 04:21:05.000000000 +0100
+++ ./include/asterisk/ael_structs.h 2008-12-10 11:16:10.000000000 +0100
@@ -88,7 +88,6 @@
struct pval *statements; /* used in case, default, catch, while's statement, CONTEXT elements, GLOBALS */
char *val; /* used in VARDEC */
char *for_test; /* used in FOR */
- int label_in_case; /* a boolean for LABELs */
struct pval *goto_target; /* used in GOTO */
} u2;
diff -r -U3 ../asterisk-1.4.21.2~dfsg/pbx/ael/ael.flex ./pbx/ael/ael.flex
--- ../asterisk-1.4.21.2~dfsg/pbx/ael/ael.flex 2008-03-18 07:37:15.000000000 +0100
+++ ./pbx/ael/ael.flex 2008-12-10 11:42:06.000000000 +0100
@@ -238,7 +238,8 @@
[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]][-a-zA-Z0-9'"_/.!\*\+\<\>\{\}$#\[\]]* {
STORE_POS;
- yylval->str = strdup(yytext);
+ yylval->str = ast_malloc(yyleng+1);
+ ast_copy_string(yylval->str, yytext, yyleng+1);
prev_word = yylval->str;
return word;
}
@@ -257,7 +258,8 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression: %s !\n", my_file, my_lineno, my_col, yytext);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = ast_malloc(yyleng+1);
+ ast_copy_string(yylval->str, yytext, yyleng+1);
prev_word = 0;
return word;
}
@@ -266,8 +268,8 @@
yymore();
} else {
STORE_LOC;
- yylval->str = strdup(yytext);
- yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */
+ yylval->str = ast_malloc(yytext);
+ ast_copy_string(yylval->str, yytext, yyleng);
unput(')');
BEGIN(0);
return word;
@@ -289,7 +291,8 @@
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n",
my_file, my_lineno, my_col, c);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = ast_malloc(yyleng+1);
+ ast_copy_string(yylval->str, yytext, yyleng+1);
return word;
}
yymore();
@@ -317,7 +320,8 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched ')' in expression!\n", my_file, my_lineno, my_col);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = ast_malloc(yyleng+1);
+ ast_copy_string(yylval->str, yytext, yyleng+1);
return word;
}
@@ -329,22 +333,22 @@
BEGIN(0);
if ( !strcmp(yytext, ")") )
return RP;
- yylval->str = strdup(yytext);
- yylval->str[yyleng-1] = '\0'; /* trim trailing ')' */
+ yylval->str = ast_malloc(yyleng);
+ ast_copy_string(yylval->str, yytext, yyleng);
unput(')');
return word;
}
}
<argg>{NOARGG}\, {
- if( parencount != 0) { /* printf("Folding in a comma!\n"); */
+ if( parencount != 0) { /* ast_log(LOG_NOTICE, "Folding in a comma!\n"); */
yymore();
} else {
STORE_LOC;
if( !strcmp(yytext,"," ) )
return COMMA;
- yylval->str = strdup(yytext);
- yylval->str[yyleng-1] = '\0';
+ yylval->str = ast_malloc(yyleng);
+ ast_copy_string(yylval->str, yytext, yyleng);
unput(',');
return word;
}
@@ -356,7 +360,8 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n", my_file, my_lineno, my_col, c);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = ast_malloc(yyleng+1);
+ ast_copy_string(yylval->str, yytext, yyleng+1);
return word;
}
yymore();
@@ -379,7 +384,8 @@
STORE_LOC;
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Mismatched '%c' in expression!\n", my_file, my_lineno, my_col, c);
BEGIN(0);
- yylval->str = strdup(yytext);
+ yylval->str = ast_malloc(yyleng+1);
+ ast_copy_string(yylval->str, yytext, yyleng+1);
return word;
}
yymore();
@@ -387,8 +393,8 @@
<semic>{NOSEMIC}; {
STORE_LOC;
- yylval->str = strdup(yytext);
- yylval->str[yyleng-1] = '\0';
+ yylval->str = ast_malloc(yyleng);
+ ast_copy_string(yylval->str, yytext, yyleng);
unput(';');
BEGIN(0);
return word;
diff -r -U3 ../asterisk-1.4.21.2~dfsg/pbx/pbx_ael.c ./pbx/pbx_ael.c
--- ../asterisk-1.4.21.2~dfsg/pbx/pbx_ael.c 2008-06-03 16:49:46.000000000 +0200
+++ ./pbx/pbx_ael.c 2008-12-10 11:59:11.000000000 +0100
@@ -710,7 +710,7 @@
regex_t preg;
/* simple case, they match exactly, the pattern and exten name */
- if( !strcmp(pattern,exten) == 0 )
+ if( strcmp(pattern,exten) == 0 )
return 1;
if ( pattern[0] == '_' ) {
@@ -2959,7 +2959,7 @@
pr->type = AEL_APPCALL;
p->u2.goto_target = get_goto_target(p);
if( p->u2.goto_target ) {
- p->u3.goto_target_in_case = p->u2.goto_target->u2.label_in_case = label_inside_case(p->u2.goto_target);
+ p->u3.goto_target_in_case = label_inside_case(p->u2.goto_target);
}
if (!p->u1.list->next) /* just one */ {
More information about the Pkg-voip-maintainers
mailing list