From d5c7a2d9c687d02b330d670f2a3f322638b65e56 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Tue, 7 Nov 2006 20:28:40 +0000 Subject: [PATCH] MFB: Fixed bug #33282 (Re-assignment by reference does not clear the is_ref flag) --- Zend/tests/bug33282.phpt | 19 +++++++++++++++++++ Zend/zend_execute.c | 6 +----- 2 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 Zend/tests/bug33282.phpt diff --git a/Zend/tests/bug33282.phpt b/Zend/tests/bug33282.phpt new file mode 100644 index 00000000000..65e3c16cf5a --- /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 ce837658094..0b3a23e8fb5 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);