]> granicus.if.org Git - php/commitdiff
Fix array_colum segfault
authorDavid Soria Parra <dsp@php.net>
Wed, 15 May 2013 12:27:59 +0000 (14:27 +0200)
committerDavid Soria Parra <dsp@php.net>
Wed, 15 May 2013 12:42:39 +0000 (14:42 +0200)
Separate zval to avoid gc from freeing

ext/standard/array.c

index cfe9be8552e6f235b54023b8140bc8cd4e4505f0..9bfb0887ac231ebe6eecd5985c4137974fb3cf34 100644 (file)
@@ -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);
                }