bjori Sun Nov 12 01:11:58 2006 UTC Added files: /php-src/ext/standard/tests/array bug36975.phpt
Modified files: /php-src/ext/standard array.c Log: Fixed bug#36975 (natcasesort() causes array_pop() to misbehave) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.389&r2=1.390&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.389 php-src/ext/standard/array.c:1.390 --- php-src/ext/standard/array.c:1.389 Sun Oct 8 13:34:23 2006 +++ php-src/ext/standard/array.c Sun Nov 12 01:11:58 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.389 2006/10/08 13:34:23 bjori Exp $ */ +/* $Id: array.c,v 1.390 2006/11/12 01:11:58 bjori Exp $ */ #include "php.h" #include "php_ini.h" @@ -2134,7 +2134,7 @@ if (should_rehash) { zend_hash_rehash(Z_ARRVAL_P(stack)); } - } else if (!key_len) { + } else if (!key_len && index >= Z_ARRVAL_P(stack)->nNextFreeElement-1) { Z_ARRVAL_P(stack)->nNextFreeElement = Z_ARRVAL_P(stack)->nNextFreeElement - 1; } http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/bug36975.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/array/bug36975.phpt +++ php-src/ext/standard/tests/array/bug36975.phpt --TEST-- Bug#36975 (natcasesort() causes array_pop() to misbehave) --FILE-- <?php $a = array('aa', 'aa', 'bb', 'bb', 'cc', 'cc'); $test = natcasesort($a); if ($test) { echo "natcasesort success!\n"; } $val = array_pop($a); $a[] = $val; var_dump($a); $b = array(1 => 'foo', 0 => 'baz'); array_pop($b); $b[] = 'bar'; array_push($b, 'bar'); print_r($b); $c = array(0, 0, 0, 0, 0); asort($c); array_pop($c); $c[] = 'foo'; $c[] = 'bar'; var_dump($c); ?> --EXPECT-- natcasesort success! array(6) { [0]=> string(2) "aa" [1]=> string(2) "aa" [3]=> string(2) "bb" [2]=> string(2) "bb" [5]=> string(2) "cc" [6]=> string(2) "cc" } Array ( [1] => foo [2] => bar [3] => bar ) array(6) { [4]=> int(0) [3]=> int(0) [2]=> int(0) [1]=> int(0) [5]=> string(3) "foo" [6]=> string(3) "bar" } --UEXPECT-- natcasesort success! array(6) { [0]=> unicode(2) "aa" [1]=> unicode(2) "aa" [3]=> unicode(2) "bb" [2]=> unicode(2) "bb" [5]=> unicode(2) "cc" [6]=> unicode(2) "cc" } Array ( [1] => foo [2] => bar [3] => bar ) array(6) { [4]=> int(0) [3]=> int(0) [2]=> int(0) [1]=> int(0) [5]=> unicode(3) "foo" [6]=> unicode(3) "bar" } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php