summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorDavid Soria Parra <dsp@php.net>2013-05-15 14:27:59 +0200
committerDavid Soria Parra <dsp@php.net>2013-05-15 14:42:39 +0200
commit139e9824adfa52c68ac45a0d8886f50ae50c0164 (patch)
treefb318145b3f40701bbdc00bf1763a1b6913bdfc3 /ext/standard/array.c
parent082ee90b9bc9b6487b36831f34acfc901c671c41 (diff)
downloadphp-git-139e9824adfa52c68ac45a0d8886f50ae50c0164.tar.gz
Fix array_colum segfault
Separate zval to avoid gc from freeing
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index cfe9be8552..9bfb0887ac 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2608,11 +2608,9 @@ PHP_FUNCTION(array_column)
} else if (zkeyval && Z_TYPE_PP(zkeyval) == IS_LONG) {
add_index_zval(return_value, Z_LVAL_PP(zkeyval), *zcolval);
} else if (zkeyval && Z_TYPE_PP(zkeyval) == IS_OBJECT) {
- zval copyval;
- ZVAL_ZVAL(&copyval, *zkeyval, 1, 0);
- convert_to_string(&copyval);
- add_assoc_zval(return_value, Z_STRVAL(copyval), *zcolval);
- zval_dtor(&copyval);
+ SEPARATE_ZVAL(zkeyval);
+ convert_to_string(*zkeyval);
+ add_assoc_zval(return_value, Z_STRVAL_PP(zkeyval), *zcolval);
} else {
add_next_index_zval(return_value, *zcolval);
}