summaryrefslogtreecommitdiff
path: root/Zend/zend_object_handlers.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-19 12:03:01 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-19 12:03:01 +0400
commit9067dbcd0d8d8bed6c723d274b162182f33281ea (patch)
tree2fedfa4a81b1c495979acdce75d0898e5d406aae /Zend/zend_object_handlers.c
parent6a3a33405b4dbe55a2ca70b1162a79125b6dd2d6 (diff)
downloadphp-git-9067dbcd0d8d8bed6c723d274b162182f33281ea.tar.gz
Use better data structures (incomplete)
Diffstat (limited to 'Zend/zend_object_handlers.c')
-rw-r--r--Zend/zend_object_handlers.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 6d58cb7d26..7cb16e18bd 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -566,12 +566,14 @@ found:
} else {
zval garbage;
- ZVAL_COPY_VALUE(&garbage, Z_REFVAL_P(variable_ptr));
+ ZVAL_COPY_VALUE(&garbage, variable_ptr);
/* if we assign referenced variable, we should separate it */
- Z_ADDREF_P(value);
- if (Z_ISREF_P(value)) {
- SEPARATE_ZVAL(value);
+ if (IS_REFCOUNTED(Z_TYPE_P(value))) {
+ Z_ADDREF_P(value);
+ if (Z_ISREF_P(value)) {
+ SEPARATE_ZVAL(value);
+ }
}
ZVAL_COPY_VALUE(variable_ptr, value);
zval_ptr_dtor(&garbage);
@@ -605,9 +607,11 @@ found:
}
} else if (EXPECTED(property_info != NULL)) {
/* if we assign referenced variable, we should separate it */
- Z_ADDREF_P(value);
- if (Z_ISREF_P(value)) {
- SEPARATE_ZVAL(value);
+ if (IS_REFCOUNTED(Z_TYPE_P(value))) {
+ Z_ADDREF_P(value);
+ if (Z_ISREF_P(value)) {
+ SEPARATE_ZVAL(value);
+ }
}
if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) &&
property_info->offset >= 0) {