From: Ilia Alshanetsky Date: Tue, 7 Nov 2006 20:28:40 +0000 (+0000) Subject: MFB: Fixed bug #33282 (Re-assignment by reference does not clear the is_ref X-Git-Tag: RELEASE_1_0_0RC1~1110 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5c7a2d9c687d02b330d670f2a3f322638b65e56;p=php MFB: Fixed bug #33282 (Re-assignment by reference does not clear the is_ref flag) --- diff --git a/Zend/tests/bug33282.phpt b/Zend/tests/bug33282.phpt new file mode 100644 index 0000000000..65e3c16cf5 --- /dev/null +++ b/Zend/tests/bug33282.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #33282 (Re-assignment by reference does not clear the is_ref flag) +--FILE-- + +--EXPECT-- +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + &int(3) +} diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index ce83765809..0b3a23e8fb 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -434,11 +434,7 @@ static void zend_assign_to_variable_reference(zval **variable_ptr_ptr, zval **va *variable_ptr_ptr = value_ptr; value_ptr->refcount++; - variable_ptr->refcount--; - if (variable_ptr->refcount==0) { - zendi_zval_dtor(*variable_ptr); - FREE_ZVAL(variable_ptr); - } + zval_ptr_dtor(&variable_ptr); } else if (!variable_ptr->is_ref) { if (variable_ptr_ptr == value_ptr_ptr) { SEPARATE_ZVAL(variable_ptr_ptr);