]> granicus.if.org Git - php/commitdiff
Fixed bug #69723 (Passing parameters by reference and array_column)
authorXinchen Hui <laruence@php.net>
Fri, 29 May 2015 05:50:44 +0000 (13:50 +0800)
committerXinchen Hui <laruence@php.net>
Fri, 29 May 2015 05:50:44 +0000 (13:50 +0800)
NEWS
ext/standard/array.c
ext/standard/tests/array/bug69723.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 6ae7dc1a2a831e0685a4a3212f7501adf5c76540..0e1a14b9732098ebf2321e1527d7ebd194913ee8 100644 (file)
--- a/NEWS
+++ b/NEWS
     required_num_args). (Julien)
 
 - Standard:
+  . Fixed bug #69723 (Passing parameters by reference and array_column).
+    (Laruence)
   . Fixed bug #69523 (Cookie name cannot be empty). (Christoph M. Becker)
   . Fixed bug #69325 (php_copy_file_ex does not pass the argument).
     (imbolk at gmail dot com)
index 3397de923b68b9acb871d55efb9dd00ba6996529..519b665df03383dc7fdadbdbfd6acf753879be2e 100644 (file)
@@ -3061,6 +3061,7 @@ PHP_FUNCTION(array_column)
 
        array_init(return_value);
        ZEND_HASH_FOREACH_VAL(arr_hash, data) {
+               ZVAL_DEREF(data);
                if (Z_TYPE_P(data) != IS_ARRAY) {
                        /* Skip elemens which are not sub-arrays */
                        continue;
diff --git a/ext/standard/tests/array/bug69723.phpt b/ext/standard/tests/array/bug69723.phpt
new file mode 100644 (file)
index 0000000..23b3576
--- /dev/null
@@ -0,0 +1,40 @@
+--TEST--
+Bug #69723 (Passing parameters by reference and array_column)
+--FILE--
+<?php
+function byReference( & $array){
+       foreach($array as &$item){
+               $item['nanana'] = 'batman';
+               $item['superhero'] = 'robin';
+       }
+}
+
+$array = [
+       [
+       'superhero'=> 'superman',
+       'nanana' => 'no nana'
+       ],
+       [
+       'superhero'=> 'acuaman',
+       'nanana' => 'no nana'
+       ],
+
+       ];
+
+var_dump(array_column($array, 'superhero'));
+byReference($array);
+var_dump(array_column($array, 'superhero'));
+?>
+--EXPECT--
+array(2) {
+  [0]=>
+  string(8) "superman"
+  [1]=>
+  string(7) "acuaman"
+}
+array(2) {
+  [0]=>
+  string(5) "robin"
+  [1]=>
+  string(5) "robin"
+}