]> granicus.if.org Git - php/commitdiff
Fixed SEPARATE_ZVAL_IF_REF()
authorDmitry Stogov <dmitry@zend.com>
Fri, 28 Feb 2014 08:21:12 +0000 (12:21 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 28 Feb 2014 08:21:12 +0000 (12:21 +0400)
Zend/zend.h

index 1ac7914c756a5732592f2836c8cc46157b5dac69..85e1287d503a64185e844cf10c630e41fc743f55 100644 (file)
@@ -703,6 +703,15 @@ END_EXTERN_C()
 
 #define SEPARATE_ZVAL_IF_REF(zv)                               \
        if (Z_ISREF_P(zv)) {                                            \
+               if (Z_REFCOUNT_P(zv) == 1) {                    \
+                       zend_reference *ref = Z_REF_P(zv);      \
+                       ZVAL_COPY_VALUE(zv, &ref->val);         \
+                       efree(ref);                                                     \
+               } else {                                                                \
+                       zval *ref = Z_REFVAL_P(zv);                     \
+                       Z_DELREF_P(zv);                                         \
+                       ZVAL_DUP(zv, ref);                                      \
+               }                                                                               \
                SEPARATE_ZVAL(zv);                                              \
        }