com php-src: Unset CV before calling zval_ptr_dtor(), because its destructor may bailout and stay CV value in inconsistet state: Zend/zend_vm_def .h
Zend/zend_vm_execute.h
| From: | Dmitry Stogov | Date: | Wed, 09 Apr 2014 06:47:24 +0000 |
| Subject: | com php-src: Unset CV before calling zval_ptr_dtor(), because its destructor may bailout and stay CV value in inconsistet state: Zend/zend_vm_def .h Zend/zend_vm_execute.h |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-77468@lists.php.net to get a copy of this message | ||
Commit: abbb1c0f0077bb092c9ec10d783b46c87357235a
Author: Dmitry Stogov <dmitry@zend.com> Wed, 9 Apr 2014 10:47:24 +0400
Parents: c99b767537a17a832f4467ffb38a33223e0767d8
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=abbb1c0f0077bb092c9ec10d783b46c87357235a
Log:
Unset CV before calling zval_ptr_dtor(), because its destructor may bailout and stay CV value in
inconsistet state
Changed paths:
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index f8d79a6..2d0d180 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -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();
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 6fd32c0..bcbbd9c 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -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();
}