summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-03-06 12:37:46 +0400
committerDmitry Stogov <dmitry@zend.com>2014-03-06 12:37:46 +0400
commit2eb980f614ab59aa8f632ae5a70f719f34e8410f (patch)
tree65909c2b09d57526e6b354c3284b52594ae68f6b /Zend/zend_variables.c
parentf3b4b1688314caa6f3dc32ef6aa796642c408d1f (diff)
downloadphp-git-2eb980f614ab59aa8f632ae5a70f719f34e8410f.tar.gz
IS_REFERENCE with refcount==1 should be handled as ordinal value
Diffstat (limited to 'Zend/zend_variables.c')
-rw-r--r--Zend/zend_variables.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index 7fd42b2eaf..47b07eec79 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -188,7 +188,12 @@ ZEND_API void _zval_internal_dtor_for_ptr(zval *zvalue ZEND_FILE_LINE_DC)
ZEND_API void zval_add_ref(zval *p)
{
if (Z_REFCOUNTED_P(p)) {
- Z_ADDREF_P(p);
+//???: autoconversion from reverence to ordinal value
+ if (Z_ISREF_P(p) && Z_REFCOUNT_P(p) == 1) {
+ ZVAL_DUP(p, Z_REFVAL_P(p));
+ } else {
+ Z_ADDREF_P(p);
+ }
}
}