Skip to content

Commit 04aa96d

Browse files
committed
Removed a hack that allowed passing of function return value by reference depending on value of reference-counter (Fixed Zend/tests/bug35393.phpt test failure)
1 parent 3d90fdf commit 04aa96d

File tree

2 files changed

+3
-12
lines changed

2 files changed

+3
-12
lines changed

Zend/zend_vm_def.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3077,10 +3077,7 @@ ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR|CV, ANY)
30773077
varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
30783078
if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
30793079
(Z_VAR_FLAGS_P(varptr) & IS_VAR_RET_REF)) &&
3080-
((!Z_REFCOUNTED_P(varptr) && Z_TYPE_P(varptr) != IS_STRING) ||
3081-
Z_ISREF_P(varptr) ||
3082-
Z_TYPE_P(varptr) == IS_OBJECT ||
3083-
(Z_REFCOUNTED_P(varptr) && Z_REFCOUNT_P(varptr) == 1))) {
3080+
(Z_ISREF_P(varptr) || Z_TYPE_P(varptr) == IS_OBJECT)) {
30843081

30853082
ZVAL_MAKE_REF(varptr);
30863083
if (OP1_TYPE == IS_CV) {

Zend/zend_vm_execute.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13554,10 +13554,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
1355413554
varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
1355513555
if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
1355613556
(Z_VAR_FLAGS_P(varptr) & IS_VAR_RET_REF)) &&
13557-
((!Z_REFCOUNTED_P(varptr) && Z_TYPE_P(varptr) != IS_STRING) ||
13558-
Z_ISREF_P(varptr) ||
13559-
Z_TYPE_P(varptr) == IS_OBJECT ||
13560-
(Z_REFCOUNTED_P(varptr) && Z_REFCOUNT_P(varptr) == 1))) {
13557+
(Z_ISREF_P(varptr) || Z_TYPE_P(varptr) == IS_OBJECT)) {
1356113558

1356213559
ZVAL_MAKE_REF(varptr);
1356313560
if (IS_VAR == IS_CV) {
@@ -30934,10 +30931,7 @@ static int ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
3093430931
varptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
3093530932
if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
3093630933
(Z_VAR_FLAGS_P(varptr) & IS_VAR_RET_REF)) &&
30937-
((!Z_REFCOUNTED_P(varptr) && Z_TYPE_P(varptr) != IS_STRING) ||
30938-
Z_ISREF_P(varptr) ||
30939-
Z_TYPE_P(varptr) == IS_OBJECT ||
30940-
(Z_REFCOUNTED_P(varptr) && Z_REFCOUNT_P(varptr) == 1))) {
30934+
(Z_ISREF_P(varptr) || Z_TYPE_P(varptr) == IS_OBJECT)) {
3094130935

3094230936
ZVAL_MAKE_REF(varptr);
3094330937
if (IS_CV == IS_CV) {

0 commit comments

Comments
 (0)