]> granicus.if.org Git - php/commitdiff
Recover from a parse error in include files (before, it could result in a crash under...
authorZeev Suraski <zeev@php.net>
Sun, 6 May 2001 19:30:31 +0000 (19:30 +0000)
committerZeev Suraski <zeev@php.net>
Sun, 6 May 2001 19:30:31 +0000 (19:30 +0000)
Zend/zend.c
Zend/zend_compile.c
Zend/zend_compile.h

index 77ed3ef141de06ac85fe3eff8d0f88a90289bedb..61260dbe592e44229d2e1bb29da4afbd1788f0fe 100644 (file)
@@ -696,6 +696,10 @@ ZEND_API void zend_error(int type, const char *format, ...)
        }
 
        va_end(args);
+
+       if (type==E_PARSE) {
+               zend_init_compiler_data_structures(CLS_C);
+       }
 }
 
 
index c3a74bc12a18b08cfd2f1e784c185235d1ae0115..67947a02fb77a19531d45f627964174e3c056233 100644 (file)
@@ -57,14 +57,15 @@ static void build_runtime_defined_function_key(zval *result, zval *name, zend_op
 }
 
 
-static void init_compiler_declarables(CLS_D ELS_DC)
+static void init_compiler_declarables(CLS_D)
 {
        CG(declarables).ticks.type = IS_LONG;
        CG(declarables).ticks.value.lval = 0;
 }
 
 
-void init_compiler(CLS_D ELS_DC)
+
+void zend_init_compiler_data_structures(CLS_D)
 {
        zend_stack_init(&CG(bp_stack));
        zend_stack_init(&CG(function_call_stack));
@@ -75,13 +76,19 @@ void init_compiler(CLS_D ELS_DC)
        CG(active_class_entry) = NULL;
        zend_llist_init(&CG(list_llist), sizeof(list_llist_element), NULL, 0);
        zend_llist_init(&CG(dimension_llist), sizeof(int), NULL, 0);
-       zend_hash_init(&CG(filenames_table), 5, NULL, (dtor_func_t) free_estring, 0);
        CG(handle_op_arrays) = 1;
        CG(in_compilation) = 0;
+       init_compiler_declarables(CLS_C);
+}
+
+
+void init_compiler(CLS_D ELS_DC)
+{
+       zend_init_compiler_data_structures(CLS_C);
        zend_init_rsrc_list(ELS_C);
-       CG(unclean_shutdown) = 0;
+       zend_hash_init(&CG(filenames_table), 5, NULL, (dtor_func_t) free_estring, 0);
        zend_llist_init(&CG(open_files), sizeof(zend_file_handle), (void (*)(void *)) zend_file_handle_dtor, 0);
-       init_compiler_declarables(CLS_C ELS_CC);
+       CG(unclean_shutdown) = 0;
 }
 
 
index 0328a4d49d689769597da04a6700d68c7e43ab3d..be986f12cc0f56e594adf77edc225042014e007d 100644 (file)
@@ -208,6 +208,7 @@ BEGIN_EXTERN_C()
 
 void init_compiler(CLS_D ELS_DC);
 void shutdown_compiler(CLS_D);
+void zend_init_compiler_data_structures(CLS_D);
 
 extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type CLS_DC);