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

Reply via email to