]> granicus.if.org Git - php/commitdiff
Fixed SIGSEGV on 'global ${"{$blah}_ID"};'
authorDmitry Stogov <dmitry@php.net>
Mon, 4 Jul 2005 13:24:46 +0000 (13:24 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 4 Jul 2005 13:24:46 +0000 (13:24 +0000)
Zend/zend_compile.h
Zend/zend_execute.c
Zend/zend_language_parser.y
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index b736eda95882802b4312fd5398975c0e3e1b5cfd..97352fdb28fec6c049861920f0987e75910523a0 100644 (file)
@@ -572,6 +572,7 @@ int zendlex(znode *zendlval TSRMLS_DC);
 #define ZEND_FETCH_LOCAL                       1
 #define ZEND_FETCH_STATIC                      2
 #define ZEND_FETCH_STATIC_MEMBER       3
+#define ZEND_FETCH_GLOBAL_LOCK 4
 
 
 /* class fetches */
index fc041a91140e44018cb5213383b6dbce30862351..2bd65b5de17eb0cd3cdf04f7ae5b7455a458f65e 100644 (file)
@@ -890,6 +890,7 @@ static inline HashTable *zend_get_target_symbol_table(zend_op *opline, temp_vari
                        return EG(active_symbol_table);
                        break;
                case ZEND_FETCH_GLOBAL:
+               case ZEND_FETCH_GLOBAL_LOCK:
                        return &EG(symbol_table);
                        break;
                case ZEND_FETCH_STATIC:
index 69286cfb04f81feec77c3598b8bbc78334567da8..56ec3a8c8ee470c87c8848c4b56e60048a2515d8 100644 (file)
@@ -459,8 +459,8 @@ non_empty_function_call_parameter_list:
 ;
 
 global_var_list:
-               global_var_list ',' global_var  { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL TSRMLS_CC); }
-       |       global_var                                              { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL TSRMLS_CC); }
+               global_var_list ',' global_var  { zend_do_fetch_global_variable(&$3, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
+       |       global_var                                              { zend_do_fetch_global_variable(&$1, NULL, ZEND_FETCH_GLOBAL_LOCK TSRMLS_CC); }
 ;
 
 
index f41dd907444ac8e4b484ba2bde974ea5a5d3a247..6c98299fdcabac0b3385e593eb0e4f94d9a09c09 100644 (file)
@@ -926,9 +926,6 @@ ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMP|VAR|CV, ANY, int type
        if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
                retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
        } else {
-               if (opline->op2.u.EA.type == ZEND_FETCH_GLOBAL && opline->op1.op_type == IS_VAR) {
-                       varname->refcount++;
-               }
                target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
 /*
                if (!target_symbol_table) {
index 781a8560cb6f81dd65474fefe087132ca90108a5..488027f933df8e88aeb45d5069f6dbac2d4d02ba 100644 (file)
@@ -1374,9 +1374,6 @@ static int zend_fetch_var_address_helper_SPEC_CONST(int type, ZEND_OPCODE_HANDLE
        if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
                retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
        } else {
-               if (opline->op2.u.EA.type == ZEND_FETCH_GLOBAL && opline->op1.op_type == IS_VAR) {
-                       varname->refcount++;
-               }
                target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
 /*
                if (!target_symbol_table) {
@@ -3792,9 +3789,6 @@ static int zend_fetch_var_address_helper_SPEC_TMP(int type, ZEND_OPCODE_HANDLER_
        if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
                retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
        } else {
-               if (opline->op2.u.EA.type == ZEND_FETCH_GLOBAL && opline->op1.op_type == IS_VAR) {
-                       varname->refcount++;
-               }
                target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
 /*
                if (!target_symbol_table) {
@@ -6731,9 +6725,6 @@ static int zend_fetch_var_address_helper_SPEC_VAR(int type, ZEND_OPCODE_HANDLER_
        if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
                retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
        } else {
-               if (opline->op2.u.EA.type == ZEND_FETCH_GLOBAL && opline->op1.op_type == IS_VAR) {
-                       varname->refcount++;
-               }
                target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
 /*
                if (!target_symbol_table) {
@@ -18786,9 +18777,6 @@ static int zend_fetch_var_address_helper_SPEC_CV(int type, ZEND_OPCODE_HANDLER_A
        if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
                retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
        } else {
-               if (opline->op2.u.EA.type == ZEND_FETCH_GLOBAL && opline->op1.op_type == IS_VAR) {
-                       varname->refcount++;
-               }
                target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
 /*
                if (!target_symbol_table) {