summaryrefslogtreecommitdiff
path: root/Zend/zend_builtin_functions.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2016-01-13 17:38:18 +0800
committerXinchen Hui <laruence@gmail.com>2016-01-13 17:38:18 +0800
commit39f09507464bfa398c476a64d8b16b4061a3faec (patch)
tree67488efe2aab43326e37660243a06bad6d1a57b6 /Zend/zend_builtin_functions.c
parent50be2c89bed61a1928cd1dd0c226fe62769344dd (diff)
downloadphp-git-39f09507464bfa398c476a64d8b16b4061a3faec.tar.gz
Fixed bug #71336 (Wrong is_ref on properties as exposed via get_object_vars())
Diffstat (limited to 'Zend/zend_builtin_functions.c')
-rw-r--r--Zend/zend_builtin_functions.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index ff5fa4fcab..231424f1de 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1198,8 +1198,12 @@ ZEND_FUNCTION(get_object_vars)
ZEND_HASH_FOREACH_STR_KEY_VAL_IND(properties, key, value) {
if (key) {
if (zend_check_property_access(zobj, key) == SUCCESS) {
- /* Not separating references */
- if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+ if (Z_ISREF_P(value) && Z_REFCOUNT_P(value) == 1) {
+ value = Z_REFVAL_P(value);
+ }
+ if (Z_REFCOUNTED_P(value)) {
+ Z_ADDREF_P(value);
+ }
if (ZSTR_VAL(key)[0] == 0) {
const char *prop_name, *class_name;
size_t prop_len;