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