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