]> granicus.if.org Git - php/commitdiff
Unset CV before calling zval_ptr_dtor(), because its destructor may bailout and stay...
authorDmitry Stogov <dmitry@zend.com>
Wed, 9 Apr 2014 06:47:24 +0000 (10:47 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 9 Apr 2014 06:47:24 +0000 (10:47 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index f8d79a6b530a2e1bc01f21ded43169f4dd31526f..2d0d18045bffcc820ad4085fb33678d163854a34 100644 (file)
@@ -4007,8 +4007,9 @@ ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMP|VAR|CV, UNUSED|CONST|VAR)
        if (OP1_TYPE == IS_CV &&
            OP2_TYPE == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
index 6fd32c049b1a3ef7afbe90b8184061e6d3e64128..bcbbd9c9c9d4b14e925ddbe6b2f36d724f01c6df 100644 (file)
@@ -4021,8 +4021,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HA
        if (IS_CONST == IS_CV &&
            IS_CONST == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -5657,8 +5658,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HAND
        if (IS_CONST == IS_CV &&
            IS_VAR == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -6296,8 +6298,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_H
        if (IS_CONST == IS_CV &&
            IS_UNUSED == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -8952,8 +8955,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HAND
        if (IS_TMP_VAR == IS_CV &&
            IS_CONST == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -10552,8 +10556,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLE
        if (IS_TMP_VAR == IS_CV &&
            IS_VAR == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -11077,8 +11082,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HAN
        if (IS_TMP_VAR == IS_CV &&
            IS_UNUSED == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -15271,8 +15277,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
        if (IS_VAR == IS_CV &&
            IS_CONST == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -19695,8 +19702,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
        if (IS_VAR == IS_CV &&
            IS_VAR == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -21117,8 +21125,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HAN
        if (IS_VAR == IS_CV &&
            IS_UNUSED == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -32434,8 +32443,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDL
        if (IS_CV == IS_CV &&
            IS_CONST == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -36615,8 +36625,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
        if (IS_CV == IS_CV &&
            IS_VAR == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }
@@ -37919,8 +37930,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HAND
        if (IS_CV == IS_CV &&
            IS_UNUSED == IS_UNUSED &&
            (opline->extended_value & ZEND_QUICK_SET)) {
-               zval_ptr_dtor(EX_VAR(opline->op1.var));
+           ZVAL_COPY_VALUE(&tmp, EX_VAR(opline->op1.var));
                ZVAL_UNDEF(EX_VAR(opline->op1.var));
+               zval_ptr_dtor(&tmp);
                CHECK_EXCEPTION();
                ZEND_VM_NEXT_OPCODE();
        }