dmitry          Wed Aug 10 04:23:40 2005 EDT

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/standard       array.c 
    /php-src/ext/standard/tests/array   bug33940.phpt 
  Log:
  Fixed bug #33940 (array_map() fails to pass by reference when called 
recursively)
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2033&r2=1.2034&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2033 php-src/NEWS:1.2034
--- php-src/NEWS:1.2033 Wed Aug 10 03:43:14 2005
+++ php-src/NEWS        Wed Aug 10 04:23:38 2005
@@ -29,6 +29,8 @@
   (Jani)
 - Fixed bug #33958 (duplicate cookies and magic_quotes=off may cause a crash).
   (Ilia)
+- Fixed bug #33940 (array_map() fails to pass by reference when called
+  recursively). (Dmitry)
 - Fixed bug #33917 (number_format() output with > 1 char separators). (Jani)
 - Fixed bug #33904 (input array keys being escaped when magic quotes is off). 
   (Ilia)
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.309&r2=1.310&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.309 php-src/ext/standard/array.c:1.310
--- php-src/ext/standard/array.c:1.309  Wed Aug 10 03:43:15 2005
+++ php-src/ext/standard/array.c        Wed Aug 10 04:23:39 2005
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.309 2005/08/10 07:43:15 dmitry Exp $ */
+/* $Id: array.c,v 1.310 2005/08/10 08:23:39 dmitry Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -4252,6 +4252,7 @@
                        efree(array_pos);
                        return;
                }
+               SEPARATE_ZVAL_IF_NOT_REF(pargs[i]);
                args[i] = *pargs[i];
                array_len[i] = zend_hash_num_elements(Z_ARRVAL_PP(pargs[i]));
                if (array_len[i] > maxlen) {
http://cvs.php.net/diff.php/php-src/ext/standard/tests/array/bug33940.phpt?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/standard/tests/array/bug33940.phpt
diff -u /dev/null php-src/ext/standard/tests/array/bug33940.phpt:1.2
--- /dev/null   Wed Aug 10 04:23:40 2005
+++ php-src/ext/standard/tests/array/bug33940.phpt      Wed Aug 10 04:23:39 2005
@@ -0,0 +1,62 @@
+--TEST--
+Bug #33940 array_map() fails to pass by reference when called recursively
+--INI--
+error_reporting=4095
+--FILE--
+<?php
+function ref_map(&$item) {
+    if(!is_array($item)) {
+        $item = 1;
+        return 2;
+    } else {
+        $ret = array_map('ref_map', &$item);
+        return $ret;
+    }
+}
+
+$a = array(array(0), 0);
+$ret = array_map('ref_map', $a);
+echo 'Array: '; print_r($a);
+echo 'Return: '; print_r($ret);
+$a = array(array(0), 0);
+$ret = array_map('ref_map', &$a);
+echo 'Array: '; print_r($a);
+echo 'Return: '; print_r($ret);
+?>
+--EXPECT--
+Array: Array
+(
+    [0] => Array
+        (
+            [0] => 0
+        )
+
+    [1] => 0
+)
+Return: Array
+(
+    [0] => Array
+        (
+            [0] => 2
+        )
+
+    [1] => 2
+)
+Array: Array
+(
+    [0] => Array
+        (
+            [0] => 1
+        )
+
+    [1] => 1
+)
+Return: Array
+(
+    [0] => Array
+        (
+            [0] => 2
+        )
+
+    [1] => 2
+)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to