summaryrefslogtreecommitdiff
path: root/Zend/zend_object_handlers.c
diff options
context:
space:
mode:
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) {