MFH: Fixed bug #47836 (array operator [] inconsistency when the array has PHP_INT_MAX index value)

Also simplified related array_push() test
This commit is contained in:
Matt Wilmas 2009-06-07 19:28:15 +00:00
parent 2462fce244
commit dca18b68d1
3 changed files with 22 additions and 21 deletions

16
Zend/tests/bug47836.phpt Normal file
View File

@ -0,0 +1,16 @@
--TEST--
Bug #47836 (array operator [] inconsistency when the array has PHP_INT_MAX index value)
--FILE--
<?php
$arr[PHP_INT_MAX] = 1;
$arr[] = 2;
var_dump($arr);
?>
--EXPECTF--
Warning: Cannot add element to the array as the next element is already occupied in %s on line 4
array(1) {
[%d]=>
int(1)
}

View File

@ -376,7 +376,7 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void
UPDATE_DATA(ht, p, pData, nDataSize);
HANDLE_UNBLOCK_INTERRUPTIONS();
if ((long)h >= (long)ht->nNextFreeElement) {
ht->nNextFreeElement = h + 1;
ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX;
}
if (pDest) {
*pDest = p->pData;
@ -404,7 +404,7 @@ ZEND_API int _zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void
HANDLE_UNBLOCK_INTERRUPTIONS();
if ((long)h >= (long)ht->nNextFreeElement) {
ht->nNextFreeElement = h + 1;
ht->nNextFreeElement = h < LONG_MAX ? h + 1 : LONG_MAX;
}
ht->nNumOfElements++;
ZEND_HASH_IF_FULL_DO_RESIZE(ht);

View File

@ -1,5 +1,5 @@
--TEST--
Test array_push() function : error conditions - min and max int values as keys
Test array_push() function : error conditions - max int value as key
--FILE--
<?php
/* Prototype : int array_push(array $stack, mixed $var [, mixed $...])
@ -8,42 +8,27 @@ Test array_push() function : error conditions - min and max int values as keys
*/
/*
* Use PHP's minimum and maximum integer values as array keys
* Use PHP's maximum integer value as array key
* then try and push new elements onto the array
*/
echo "*** Testing array_push() : error conditions ***\n";
$array = array(-PHP_INT_MAX => 'min', PHP_INT_MAX => 'max');
$array = array(PHP_INT_MAX => 'max');
var_dump(array_push($array, 'new'));
var_dump($array);
var_dump(array_push($array, 'var'));
var_dump($array);
echo "Done";
?>
--EXPECTF--
*** Testing array_push() : error conditions ***
int(3)
array(3) {
[-%d]=>
string(3) "min"
[%d]=>
string(3) "max"
[-%d]=>
string(3) "new"
}
Warning: array_push(): Cannot add element to the array as the next element is already occupied in %s on line %d
bool(false)
array(3) {
[-%d]=>
string(3) "min"
array(1) {
[%d]=>
string(3) "max"
[-%d]=>
string(3) "new"
}
Done