summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2016-07-20 16:12:37 +0800
committerXinchen Hui <laruence@gmail.com>2016-07-20 16:12:37 +0800
commit3c3b8c8365dc9ac7d62034c9eecbabb4800b7353 (patch)
tree05947c35c279b214b103b811850a1beaa50409d7 /ext/standard/array.c
parentdf5ee7bc2557fd87a7e296d399cd947d68c1a4d3 (diff)
downloadphp-git-3c3b8c8365dc9ac7d62034c9eecbabb4800b7353.tar.gz
Fixed bug #72622 (array_walk + array_replace_recursive create references from nothing)
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 6c58e3aa74..e5c38f2906 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1481,7 +1481,9 @@ static int php_array_walk(HashTable *target_hash, zval *userdata, int recursive)
if (!was_ref && Z_ISREF(args[0])) {
/* copy reference back */
zval garbage;
-
+ if (Z_REFCOUNT(args[0]) == 1) {
+ ZVAL_UNREF(&args[0]);
+ }
ZVAL_COPY_VALUE(&garbage, zv);
ZVAL_COPY_VALUE(zv, &args[0]);
zval_ptr_dtor(&garbage);