summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-03-04 17:04:46 +0400
committerDmitry Stogov <dmitry@zend.com>2014-03-04 17:04:46 +0400
commitba30f1e946b07c1e6c9571f348a2c3340f2df39d (patch)
treee5380a6dc966a5fc8a77eb77a1374e8dc0916910
parentdbb6837627b08a991807d0ab2c41b9dc3879a39e (diff)
downloadphp-git-ba30f1e946b07c1e6c9571f348a2c3340f2df39d.tar.gz
Fixed assign by reference
-rw-r--r--Zend/zend_execute.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index db08f3c742..a2d4be204a 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -623,10 +623,11 @@ static void zend_assign_to_variable_reference(zval *variable_ptr, zval *value_pt
if (variable_ptr == &EG(error_zval) || value_ptr == &EG(error_zval)) {
ZVAL_NULL(variable_ptr);
} else if (EXPECTED(variable_ptr != value_ptr)) {
+ zval tmp;
SEPARATE_ZVAL_TO_MAKE_IS_REF(value_ptr);
- Z_ADDREF_P(value_ptr);
+ ZVAL_COPY(&tmp, value_ptr);
zval_ptr_dtor(variable_ptr);
- ZVAL_COPY_VALUE(variable_ptr, value_ptr);
+ ZVAL_COPY_VALUE(variable_ptr, &tmp);
} else if (!Z_ISREF_P(variable_ptr)) {
ZVAL_NEW_REF(variable_ptr, variable_ptr);
}