From cac6b04113f6ab59d4ae22d760f9375627e059fc Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 13 Jun 2019 10:59:01 +0200 Subject: [PATCH] Fixed bug #78154 --- NEWS | 1 + Zend/tests/bug78154.phpt | 23 +++++++++++++++++++++++ Zend/zend_vm_def.h | 2 ++ Zend/zend_vm_execute.h | 3 +++ 4 files changed, 29 insertions(+) create mode 100644 Zend/tests/bug78154.phpt diff --git a/NEWS b/NEWS index 7b1e20706a..c438915dd3 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ PHP NEWS - Core: . Fixed bug #78151 (Segfault caused by indirect expressions in PHP 7.4a1). (Nikita) + . Fixed bug #78154 (SEND_VAR_NO_REF does not always send reference). (Nikita) 13 Jun 2019, PHP 7.4.0alpha1 diff --git a/Zend/tests/bug78154.phpt b/Zend/tests/bug78154.phpt new file mode 100644 index 0000000000..2a69ebe811 --- /dev/null +++ b/Zend/tests/bug78154.phpt @@ -0,0 +1,23 @@ +--TEST-- +Bug #78154: SEND_VAR_NO_REF does not always send reference +--FILE-- + +--EXPECTF-- +Notice: Only variables should be passed by reference in %s on line %d +int(1) +int(1145324612) + +Notice: Only variables should be passed by reference in %s on line %d +int(1) +int(1145324612) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 6c8bce1dd1..2cb9d038a4 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -4536,6 +4536,7 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, NUM) } SAVE_OPLINE(); + ZVAL_NEW_REF(arg, arg); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -4576,6 +4577,7 @@ ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, NUM, SPEC(QUICK_ARG)) } SAVE_OPLINE(); + ZVAL_NEW_REF(arg, arg); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 701087a832..e6d8e88473 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -20304,6 +20304,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDL } SAVE_OPLINE(); + ZVAL_NEW_REF(arg, arg); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -20344,6 +20345,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HA } SAVE_OPLINE(); + ZVAL_NEW_REF(arg, arg); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } @@ -20384,6 +20386,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX } SAVE_OPLINE(); + ZVAL_NEW_REF(arg, arg); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } -- 2.50.1