com php-src: Removed wrong warning: Zend/tests/bug7221 5_3.phpt Zend/zend_vm_def.h Zend/zend_vm_ execute.h
| From: | Dmitry Stogov | Date: | Wed, 13 Jul 2016 17:04:47 +0000 |
| Subject: | com php-src: Removed wrong warning: Zend/tests/bug7221 5_3.phpt Zend/zend_vm_def.h Zend/zend_vm_ execute.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-92997@lists.php.net to get a copy of this message | ||
Commit: 02dca0cf160e239a5797176bd0eacf600c6667bf
Author: Dmitry Stogov <dmitry@zend.com> Wed, 13 Jul 2016 20:04:47 +0300
Parents: afd3e39d6697e36d3b92cee5da911e4ea0de3901
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=02dca0cf160e239a5797176bd0eacf600c6667bf
Log:
Removed wrong warning
Changed paths:
A Zend/tests/bug72215_3.phpt
M Zend/zend_vm_def.h
M Zend/zend_vm_execute.h
Diff:
diff --git a/Zend/tests/bug72215_3.phpt b/Zend/tests/bug72215_3.phpt
new file mode 100644
index 0000000..38c017b
--- /dev/null
+++ b/Zend/tests/bug72215_3.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #72215.3 (Wrong return value if var modified in finally)
+--FILE--
+<?php
+function &test() {
+ try {
+ return $a;
+ } finally {
+ $a = 2;
+ }
+}
+var_dump(test());
+?>
+--EXPECT--
+NULL
+
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index f93e89f..d8e033f 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -8103,13 +8103,11 @@ ZEND_VM_HANDLER(51, ZEND_MAKE_REF, VAR|CV, UNUSED)
if (OP1_TYPE == IS_CV) {
if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(op1, BP_VAR_R);
ZVAL_NULL(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_MAKE_REF(op1);
+ ZVAL_COPY(EX_VAR(opline->result.var), op1);
}
- ZVAL_MAKE_REF(op1);
- ZVAL_COPY(EX_VAR(opline->result.var), op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
op1 = Z_INDIRECT_P(op1);
if (EXPECTED(!Z_ISREF_P(op1))) {
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 8574b24..7030499 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -21820,13 +21820,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDL
if (IS_VAR == IS_CV) {
if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(op1, BP_VAR_R);
ZVAL_NULL(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_MAKE_REF(op1);
+ ZVAL_COPY(EX_VAR(opline->result.var), op1);
}
- ZVAL_MAKE_REF(op1);
- ZVAL_COPY(EX_VAR(opline->result.var), op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
op1 = Z_INDIRECT_P(op1);
if (EXPECTED(!Z_ISREF_P(op1))) {
@@ -42817,13 +42815,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL
ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLE
if (IS_CV == IS_CV) {
if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
- SAVE_OPLINE();
- GET_OP1_UNDEF_CV(op1, BP_VAR_R);
ZVAL_NULL(EX_VAR(opline->result.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+ } else {
+ ZVAL_MAKE_REF(op1);
+ ZVAL_COPY(EX_VAR(opline->result.var), op1);
}
- ZVAL_MAKE_REF(op1);
- ZVAL_COPY(EX_VAR(opline->result.var), op1);
} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
op1 = Z_INDIRECT_P(op1);
if (EXPECTED(!Z_ISREF_P(op1))) {