From: Zeev Suraski Date: Wed, 15 Mar 2000 17:32:29 +0000 (+0000) Subject: - Fix newly introduced problem reported by Sam Ruby X-Git-Tag: PHP-4.0-RC1~124 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15dd8e61a2467ef6ecd1c3032c1792e21b1ba178;p=php - Fix newly introduced problem reported by Sam Ruby --- diff --git a/Zend/zend-scanner.l b/Zend/zend-scanner.l index 538a85e2ff..5e214e13e6 100644 --- a/Zend/zend-scanner.l +++ b/Zend/zend-scanner.l @@ -334,12 +334,13 @@ ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count, zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); zend_op_array *original_active_op_array = CG(active_op_array); zend_op_array *retval=NULL; - zend_file_handle *file_handle; int i; int compiler_result; int compiled_files=0; + int last_file=0; znode retval_znode; zend_bool original_in_compilation = CG(in_compilation); + zend_file_handle **file_handles = (zend_file_handle **) do_alloca(file_count * sizeof(zend_file_handle *)); retval_znode.op_type = IS_CONST; retval_znode.u.constant.type = IS_LONG; @@ -351,19 +352,26 @@ ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count, save_lexical_state(&original_lex_state CLS_CC); retval = op_array; /* success oriented */ + + for (i=0; ifilename); + if (open_file_for_scanning(file_handles[i] CLS_CC)==FAILURE) { + zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handles[i]->filename); } else { CG(in_compilation) = 1; CG(active_op_array) = op_array; compiler_result = zendparse(CLS_C); - zend_close_file_handle(file_handle CLS_CC); - if (i == file_count-1) { + zend_close_file_handle(file_handles[i] CLS_CC); + if (i == last_file) { do_return(&retval_znode, 0 CLS_CC); } restore_lexical_state(&original_lex_state CLS_CC); @@ -391,6 +399,7 @@ ZEND_API zend_op_array *v_compile_files(int mark_as_ref CLS_DC, int file_count, retval = NULL; } } + free_alloca(file_handles); return retval; } diff --git a/Zend/zend.h b/Zend/zend.h index aac08cc057..614d8614f7 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -74,6 +74,14 @@ # define ZEND_EXTENSIONS_SUPPORT 0 #endif +#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(ZEND_WIN32)) +# define do_alloca(p) alloca(p) +# define free_alloca(p) +#else +# define do_alloca(p) emalloc(p) +# define free_alloca(p) efree(p) +#endif + #if ZEND_DEBUG #define ZEND_FILE_LINE_D char *__zend_filename, uint __zend_lineno #define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index e726736e9d..44dab2b10c 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -966,15 +966,6 @@ static int zend_check_symbol(zval **pz) #define CHECK_SYMBOL_TABLES() #endif - -#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(ZEND_WIN32)) -# define do_alloca(p) alloca(p) -# define free_alloca(p) -#else -# define do_alloca(p) emalloc(p) -# define free_alloca(p) efree(p) -#endif - #define NEXT_OPCODE() \ CHECK_SYMBOL_TABLES() \ opline++; \