mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-08 10:58:15 +00:00
Merged revisions 109357 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r109357 | murf | 2008-03-18 08:09:50 -0600 (Tue, 18 Mar 2008) | 25 lines Merged revisions 109309 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r109309 | murf | 2008-03-18 00:37:15 -0600 (Tue, 18 Mar 2008) | 17 lines (closes issue #11903) Reported by: atis Many thanks to atis for spotting this problem and reporting it. The fix was to straighten out how items are placed on and removed from the file stack. Regressions as well as the provided test case helped to straighten out all code paths. valgrind was used to make sure all memory allocated was freed. Sorry for not solving this earlier. I got distracted. Added the ntest23 regression test, which is mainly a copy of ntest22, but with a few juicy errors thrown in, to replicate the kind of error that atis spotted. ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@109397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -445,8 +445,6 @@ includes { STORE_POS; return KW_INCLUDES;}
|
||||
<<EOF>> {
|
||||
char fnamebuf[2048];
|
||||
if (include_stack_index > 0 && include_stack[include_stack_index-1].globbuf_pos < include_stack[include_stack_index-1].globbuf.gl_pathc-1) {
|
||||
free(my_file);
|
||||
my_file = 0;
|
||||
yy_delete_buffer( YY_CURRENT_BUFFER, yyscanner );
|
||||
include_stack[include_stack_index-1].globbuf_pos++;
|
||||
setup_filestack(fnamebuf, sizeof(fnamebuf), &include_stack[include_stack_index-1].globbuf, include_stack[include_stack_index-1].globbuf_pos, yyscanner, 0);
|
||||
@@ -457,13 +455,13 @@ includes { STORE_POS; return KW_INCLUDES;}
|
||||
free(include_stack[include_stack_index].fname);
|
||||
include_stack[include_stack_index].fname = 0;
|
||||
}
|
||||
if (my_file) {
|
||||
free(my_file);
|
||||
my_file = 0;
|
||||
}
|
||||
if ( --include_stack_index < 0 ) {
|
||||
yyterminate();
|
||||
} else {
|
||||
if (my_file) {
|
||||
free(my_file);
|
||||
my_file = 0;
|
||||
}
|
||||
globfree(&include_stack[include_stack_index].globbuf);
|
||||
include_stack[include_stack_index].globbuf_pos = -1;
|
||||
|
||||
@@ -670,12 +668,16 @@ static void setup_filestack(char *fnamebuf2, int fnamebuf_siz, glob_t *globbuf,
|
||||
buffer[stats.st_size] = 0;
|
||||
ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf2, (int)stats.st_size);
|
||||
fclose(in1);
|
||||
if (my_file)
|
||||
free(my_file);
|
||||
my_file = strdup(fnamebuf2);
|
||||
if (include_stack[include_stack_index].fname) {
|
||||
free(include_stack[include_stack_index].fname);
|
||||
include_stack[include_stack_index].fname = 0;
|
||||
}
|
||||
include_stack[include_stack_index].fname = strdup(my_file);
|
||||
include_stack[include_stack_index].lineno = my_lineno;
|
||||
include_stack[include_stack_index].colno = my_col+yyleng;
|
||||
if (my_file)
|
||||
free(my_file);
|
||||
my_file = strdup(fnamebuf2);
|
||||
if (create)
|
||||
include_stack[include_stack_index].globbuf = *globbuf;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user