tony2001                Wed Nov 22 10:58:11 2006 UTC

  Modified files:              
    /php-src/ext/standard       array.c 
    /php-src/ext/standard/tests/array   bug39576.phpt 
  Log:
  fix #39576 (array_walk() doesn't separate userdata zval)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.394&r2=1.395&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.394 php-src/ext/standard/array.c:1.395
--- php-src/ext/standard/array.c:1.394  Tue Nov 21 22:21:38 2006
+++ php-src/ext/standard/array.c        Wed Nov 22 10:58:11 2006
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.394 2006/11/21 22:21:38 andrei Exp $ */
+/* $Id: array.c,v 1.395 2006/11/22 10:58:11 tony2001 Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -1120,7 +1120,7 @@
        orig_array_walk_fci = BG(array_walk_fci);
        orig_array_walk_fci_cache = BG(array_walk_fci_cache);
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zf|z", &array,
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zf|z/", &array,
                                                          &BG(array_walk_fci), 
&BG(array_walk_fci_cache), &userdata) == FAILURE) {
                BG(array_walk_fci) = orig_array_walk_fci;
                BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
@@ -1155,7 +1155,7 @@
        orig_array_walk_fci = BG(array_walk_fci);
        orig_array_walk_fci_cache = BG(array_walk_fci_cache);
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zf|z", &array,
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zf|z/", &array,
                                                          &BG(array_walk_fci), 
&BG(array_walk_fci_cache), &userdata) == FAILURE) {
                BG(array_walk_fci) = orig_array_walk_fci;
                BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/bug39576.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/standard/tests/array/bug39576.phpt
diff -u /dev/null php-src/ext/standard/tests/array/bug39576.phpt:1.2
--- /dev/null   Wed Nov 22 10:58:11 2006
+++ php-src/ext/standard/tests/array/bug39576.phpt      Wed Nov 22 10:58:11 2006
@@ -0,0 +1,70 @@
+--TEST--
+Bug #39576 (array_walk() doesn't separate userdata zval)
+--FILE--
+<?php
+
+class Test {
+
+       public $_table = '';
+       public $_columns = array ();
+       public $_primary = array ();
+
+}
+
+$test = new Test ();
+$test->name = 'test';
+$test->_columns['name'] = new stdClass;
+
+function test ($value, $column, &$columns) {}
+
+array_walk (
+       get_object_vars ($test),
+       'test',
+       $test->_columns
+);
+
+var_dump($test);
+
+array_intersect_key (
+       get_object_vars ($test),
+       $test->_primary
+);
+
+echo "Done\n";
+?>
+--EXPECTF--    
+Strict Standards: Only variables should be passed by reference in %s on line %d
+object(Test)#%d (4) {
+  ["_table"]=>
+  string(0) ""
+  ["_columns"]=>
+  array(1) {
+    ["name"]=>
+    object(stdClass)#%d (0) {
+    }
+  }
+  ["_primary"]=>
+  array(0) {
+  }
+  ["name"]=>
+  string(4) "test"
+}
+Done
+--UEXPECTF--
+Strict Standards: Only variables should be passed by reference in %s on line %d
+object(Test)#%d (4) {
+  [u"_table"]=>
+  unicode(0) ""
+  [u"_columns"]=>
+  array(1) {
+    [u"name"]=>
+    object(stdClass)#%d (0) {
+    }
+  }
+  [u"_primary"]=>
+  array(0) {
+  }
+  [u"name"]=>
+  unicode(4) "test"
+}
+Done

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

Reply via email to