mirror of
https://github.com/php/php-src.git
synced 2026-04-03 14:12:38 +02:00
Fixed bug #71914 (Reference is lost in "switch")
This commit is contained in:
1
NEWS
1
NEWS
@@ -3,6 +3,7 @@ PHP NEWS
|
||||
?? ??? 2016 PHP 7.0.6
|
||||
|
||||
- Core:
|
||||
. Fixed bug #71914 (Reference is lost in "switch"). (Laruence)
|
||||
. Fixed Bug #71859 (zend_objects_store_call_destructors operates on realloced
|
||||
memory, crashing). (Laruence)
|
||||
. Fixed bug #71841 (EG(error_zval) is not handled well). (Laruence)
|
||||
|
||||
25
Zend/tests/bug71914.phpt
Normal file
25
Zend/tests/bug71914.phpt
Normal file
@@ -0,0 +1,25 @@
|
||||
--TEST--
|
||||
Bug #71914 (Reference is lost in "switch")
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function bug(&$value) {
|
||||
switch ($value) {
|
||||
case "xxxx":
|
||||
$value = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function test($arr, &$dummy) {
|
||||
bug($arr["str"]);
|
||||
var_dump($arr["str"]);
|
||||
}
|
||||
|
||||
|
||||
$array = array("str" => "xxxx");
|
||||
test($array, $array["str"]);
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
@@ -4903,7 +4903,7 @@ ZEND_VM_HANDLER(48, ZEND_CASE, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
SAVE_OPLINE();
|
||||
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((OP1_TYPE & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((OP1_TYPE & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
|
||||
@@ -5858,7 +5858,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(
|
||||
SAVE_OPLINE();
|
||||
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((IS_CONST & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((IS_CONST & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -9654,7 +9654,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEN
|
||||
SAVE_OPLINE();
|
||||
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((IS_CONST & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((IS_CONST & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -11428,7 +11428,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER
|
||||
SAVE_OPLINE();
|
||||
if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((IS_CONST & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((IS_CONST & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -32184,7 +32184,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEN
|
||||
SAVE_OPLINE();
|
||||
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((IS_CV & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((IS_CV & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -37280,7 +37280,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_O
|
||||
SAVE_OPLINE();
|
||||
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((IS_CV & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((IS_CV & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -39873,7 +39873,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZE
|
||||
SAVE_OPLINE();
|
||||
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if ((IS_CV & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if ((IS_CV & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -42108,7 +42108,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER
|
||||
SAVE_OPLINE();
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -44256,7 +44256,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZE
|
||||
SAVE_OPLINE();
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
@@ -45403,7 +45403,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLE
|
||||
SAVE_OPLINE();
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
|
||||
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
|
||||
} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
} else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && UNEXPECTED(Z_ISREF_P(op1))) {
|
||||
/* Don't keep lock on reference, lock the value instead */
|
||||
if (UNEXPECTED(Z_REFCOUNT_P(op1) == 1)) {
|
||||
ZVAL_UNREF(op1);
|
||||
|
||||
Reference in New Issue
Block a user