Fixed bug#36975 (natcasesort() causes array_pop() to misbehave)

This commit is contained in:
Hannes Magnusson 2006-11-12 01:11:58 +00:00
parent bcdfb60c51
commit 6d22129d9b
2 changed files with 99 additions and 1 deletions

View File

@ -2134,7 +2134,7 @@ static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
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;
}

View File

@ -0,0 +1,98 @@
--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"
}