[asterisk-commits] trunk r22957 - in /trunk/pbx/ael: ael.flex
ael_lex.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu Apr 27 12:29:15 MST 2006
Author: rizzo
Date: Thu Apr 27 14:29:14 2006
New Revision: 22957
URL: http://svn.digium.com/view/asterisk?rev=22957&view=rev
Log:
slightly restructure a block to reduce nesting,
mark some missing error checks
Modified:
trunk/pbx/ael/ael.flex
trunk/pbx/ael/ael_lex.c
Modified: trunk/pbx/ael/ael.flex
URL: http://svn.digium.com/view/asterisk/trunk/pbx/ael/ael.flex?rev=22957&r1=22956&r2=22957&view=diff
==============================================================================
--- trunk/pbx/ael/ael.flex (original)
+++ trunk/pbx/ael/ael.flex Thu Apr 27 14:29:14 2006
@@ -318,61 +318,61 @@
\#include[ \t]+\"[^\"]+\" {
FILE *in1;
char fnamebuf[1024],*p1,*p2;
+ int error = 1; /* don't use the file if set */
+ p1 = strchr(yytext,'"');
+ p2 = strrchr(yytext,'"');
if ( include_stack_index >= MAX_INCLUDE_DEPTH ) {
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Includes nested too deeply! Wow!!! How did you do that?\n", my_file, my_lineno, my_col);
+ } else if ( (int)(p2-p1) > sizeof(fnamebuf) - 1 ) {
+ ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Filename is incredibly way too long (%d chars!). Inclusion ignored!\n", my_file, my_lineno, my_col, yyleng - 10);
} else {
- p1 = strchr(yytext,'"');
- p2 = strrchr(yytext,'"');
- if ( (int)(p2-p1) > 1023 ) {
- ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Filename is incredibly way too long (%d chars!). Inclusion ignored!\n", my_file, my_lineno, my_col, yyleng - 10);
+ int i;
+ strncpy(fnamebuf, p1, p2-p1);
+ fnamebuf[p2-p1] = 0;
+ for (i=0; i<include_stack_index; i++) {
+ if ( !strcmp(fnamebuf,include_stack[i].fname )) {
+ ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Nice Try!!! But %s has already been included (perhaps by another file), and would cause an infinite loop of file inclusions!!! Include directive ignored\n",
+ my_file, my_lineno, my_col, fnamebuf);
+ break;
+ }
+ }
+ if (i == include_stack_index)
+ error = 0; /* we can use this file */
+ }
+ if ( !error ) { /* valid file name */
+ *p2 = 0;
+ /* relative vs. absolute */
+ if ( *(p1+1) != '/' ) {
+ /* XXX must check overflows */
+ strcpy(fnamebuf,ast_config_AST_CONFIG_DIR);
+ strcat(fnamebuf,"/");
+ strcat(fnamebuf,p1+1);
+ } else
+ strcpy(fnamebuf,p1+1);
+ in1 = fopen( fnamebuf, "r" );
+ if ( ! in1 ) {
+ ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive!\n", my_file, my_lineno, my_col, fnamebuf);
} else {
- int i;
- int found = 0;
- strncpy(fnamebuf,p1,p2-p1);
- fnamebuf[p2-p1] = 0;
- for (i=0; i<include_stack_index; i++) {
- if ( !strcmp(fnamebuf,include_stack[i].fname )) {
- ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Nice Try!!! But %s has already been included (perhaps by another file), and would cause an infinite loop of file inclusions!!! Include directive ignored\n",
- my_file, my_lineno, my_col, fnamebuf);
- found=1;
- break;
- }
- }
- if ( !found ) {
- *p2 = 0;
- /* relative vs. absolute */
- if ( *(p1+1) != '/' ) {
- strcpy(fnamebuf,ast_config_AST_CONFIG_DIR);
- strcat(fnamebuf,"/");
- strcat(fnamebuf,p1+1);
- } else
- strcpy(fnamebuf,p1+1);
- in1 = fopen( fnamebuf, "r" );
- if ( ! in1 ) {
- ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive!\n", my_file, my_lineno, my_col, fnamebuf);
- } else {
- char *buffer;
- struct stat stats;
- stat(fnamebuf, &stats);
- buffer = (char*)malloc(stats.st_size+1);
- fread(buffer, 1, stats.st_size, in1);
- buffer[stats.st_size] = 0;
- ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf, (int)stats.st_size);
- fclose(in1);
-
- include_stack[include_stack_index].fname = my_file;
- my_file = strdup(fnamebuf);
- include_stack[include_stack_index].lineno = my_lineno;
- include_stack[include_stack_index].colno = my_col+yyleng;
- include_stack[include_stack_index++].bufstate = YY_CURRENT_BUFFER;
-
- yy_switch_to_buffer(ael_yy_scan_string (buffer ,yyscanner),yyscanner);
- free(buffer);
- my_lineno = 1;
- my_col = 1;
- BEGIN(INITIAL);
- }
- }
+ char *buffer;
+ struct stat stats;
+ stat(fnamebuf, &stats);
+ buffer = (char*)malloc(stats.st_size+1);
+ fread(buffer, 1, stats.st_size, in1);
+ buffer[stats.st_size] = 0;
+ ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf, (int)stats.st_size);
+ fclose(in1);
+
+ include_stack[include_stack_index].fname = my_file;
+ my_file = strdup(fnamebuf);
+ include_stack[include_stack_index].lineno = my_lineno;
+ include_stack[include_stack_index].colno = my_col+yyleng;
+ include_stack[include_stack_index++].bufstate = YY_CURRENT_BUFFER;
+
+ yy_switch_to_buffer(ael_yy_scan_string (buffer ,yyscanner),yyscanner);
+ free(buffer);
+ my_lineno = 1;
+ my_col = 1;
+ BEGIN(INITIAL);
}
}
}
Modified: trunk/pbx/ael/ael_lex.c
URL: http://svn.digium.com/view/asterisk/trunk/pbx/ael/ael_lex.c?rev=22957&r1=22956&r2=22957&view=diff
==============================================================================
--- trunk/pbx/ael/ael_lex.c (original)
+++ trunk/pbx/ael/ael_lex.c Thu Apr 27 14:29:14 2006
@@ -1470,61 +1470,61 @@
{
FILE *in1;
char fnamebuf[1024],*p1,*p2;
+ int error = 1; /* don't use the file if set */
+ p1 = strchr(yytext,'"');
+ p2 = strrchr(yytext,'"');
if ( include_stack_index >= MAX_INCLUDE_DEPTH ) {
ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Includes nested too deeply! Wow!!! How did you do that?\n", my_file, my_lineno, my_col);
+ } else if ( (int)(p2-p1) > sizeof(fnamebuf) - 1 ) {
+ ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Filename is incredibly way too long (%d chars!). Inclusion ignored!\n", my_file, my_lineno, my_col, yyleng - 10);
} else {
- p1 = strchr(yytext,'"');
- p2 = strrchr(yytext,'"');
- if ( (int)(p2-p1) > 1023 ) {
- ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Filename is incredibly way too long (%d chars!). Inclusion ignored!\n", my_file, my_lineno, my_col, yyleng - 10);
+ int i;
+ strncpy(fnamebuf, p1, p2-p1);
+ fnamebuf[p2-p1] = 0;
+ for (i=0; i<include_stack_index; i++) {
+ if ( !strcmp(fnamebuf,include_stack[i].fname )) {
+ ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Nice Try!!! But %s has already been included (perhaps by another file), and would cause an infinite loop of file inclusions!!! Include directive ignored\n",
+ my_file, my_lineno, my_col, fnamebuf);
+ break;
+ }
+ }
+ if (i == include_stack_index)
+ error = 0; /* we can use this file */
+ }
+ if ( !error ) { /* valid file name */
+ *p2 = 0;
+ /* relative vs. absolute */
+ if ( *(p1+1) != '/' ) {
+ /* XXX must check overflows */
+ strcpy(fnamebuf,ast_config_AST_CONFIG_DIR);
+ strcat(fnamebuf,"/");
+ strcat(fnamebuf,p1+1);
+ } else
+ strcpy(fnamebuf,p1+1);
+ in1 = fopen( fnamebuf, "r" );
+ if ( ! in1 ) {
+ ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive!\n", my_file, my_lineno, my_col, fnamebuf);
} else {
- int i;
- int found = 0;
- strncpy(fnamebuf,p1,p2-p1);
- fnamebuf[p2-p1] = 0;
- for (i=0; i<include_stack_index; i++) {
- if ( !strcmp(fnamebuf,include_stack[i].fname )) {
- ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Nice Try!!! But %s has already been included (perhaps by another file), and would cause an infinite loop of file inclusions!!! Include directive ignored\n",
- my_file, my_lineno, my_col, fnamebuf);
- found=1;
- break;
- }
- }
- if ( !found ) {
- *p2 = 0;
- /* relative vs. absolute */
- if ( *(p1+1) != '/' ) {
- strcpy(fnamebuf,ast_config_AST_CONFIG_DIR);
- strcat(fnamebuf,"/");
- strcat(fnamebuf,p1+1);
- } else
- strcpy(fnamebuf,p1+1);
- in1 = fopen( fnamebuf, "r" );
- if ( ! in1 ) {
- ast_log(LOG_ERROR,"File=%s, line=%d, column=%d: Couldn't find the include file: %s; ignoring the Include directive!\n", my_file, my_lineno, my_col, fnamebuf);
- } else {
- char *buffer;
- struct stat stats;
- stat(fnamebuf, &stats);
- buffer = (char*)malloc(stats.st_size+1);
- fread(buffer, 1, stats.st_size, in1);
- buffer[stats.st_size] = 0;
- ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf, (int)stats.st_size);
- fclose(in1);
-
- include_stack[include_stack_index].fname = my_file;
- my_file = strdup(fnamebuf);
- include_stack[include_stack_index].lineno = my_lineno;
- include_stack[include_stack_index].colno = my_col+yyleng;
- include_stack[include_stack_index++].bufstate = YY_CURRENT_BUFFER;
-
- ael_yy_switch_to_buffer(ael_yy_scan_string (buffer ,yyscanner),yyscanner);
- free(buffer);
- my_lineno = 1;
- my_col = 1;
- BEGIN(INITIAL);
- }
- }
+ char *buffer;
+ struct stat stats;
+ stat(fnamebuf, &stats);
+ buffer = (char*)malloc(stats.st_size+1);
+ fread(buffer, 1, stats.st_size, in1);
+ buffer[stats.st_size] = 0;
+ ast_log(LOG_NOTICE," --Read in included file %s, %d chars\n",fnamebuf, (int)stats.st_size);
+ fclose(in1);
+
+ include_stack[include_stack_index].fname = my_file;
+ my_file = strdup(fnamebuf);
+ include_stack[include_stack_index].lineno = my_lineno;
+ include_stack[include_stack_index].colno = my_col+yyleng;
+ include_stack[include_stack_index++].bufstate = YY_CURRENT_BUFFER;
+
+ ael_yy_switch_to_buffer(ael_yy_scan_string (buffer ,yyscanner),yyscanner);
+ free(buffer);
+ my_lineno = 1;
+ my_col = 1;
+ BEGIN(INITIAL);
}
}
}
More information about the asterisk-commits
mailing list