diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-03-05 00:28:01 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-03-05 00:28:01 +0400 |
| commit | db7b5325f08f706b311d69cb204f4ea8b6bd0356 (patch) | |
| tree | 1c58a8d6e159b2a075638631692474e3be662f3a | |
| parent | 6b8c46dc764c6b9baa3b56914839c1a385773938 (diff) | |
| download | php-git-db7b5325f08f706b311d69cb204f4ea8b6bd0356.tar.gz | |
Fixed IS_REFERENCE separation
| -rw-r--r-- | Zend/zend.h | 5 | ||||
| -rw-r--r-- | Zend/zend_object_handlers.c | 5 |
2 files changed, 7 insertions, 3 deletions
diff --git a/Zend/zend.h b/Zend/zend.h index 27caadc51c..09db94d836 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -696,7 +696,10 @@ END_EXTERN_C() zval *_zv = (zv); \ if (Z_REFCOUNTED_P(_zv)) { \ if (Z_REFCOUNT_P(_zv) > 1) { \ - if (Z_TYPE_P(_zv) == IS_OBJECT || \ + if (Z_ISREF_P(_zv)) { \ + Z_DELREF_P(_zv); \ + ZVAL_DUP(_zv, Z_REFVAL_P(_zv)); \ + } else if (Z_TYPE_P(_zv) == IS_OBJECT ||\ Z_TYPE_P(_zv) == IS_RESOURCE) { \ Z_ADDREF_P(_zv); \ } else { \ diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index de5da28e6a..2205ab2f1e 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -638,9 +638,10 @@ found: } else if (EXPECTED(property_info != NULL)) { /* if we assign referenced variable, we should separate it */ if (IS_REFCOUNTED(Z_TYPE_P(value))) { - Z_ADDREF_P(value); if (Z_ISREF_P(value)) { - SEPARATE_ZVAL(value); + ZVAL_DUP(value, Z_REFVAL_P(value)); + } else { + Z_ADDREF_P(value); } } if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) && |
