mirror of
https://github.com/php/php-src.git
synced 2026-04-25 17:08:14 +02:00
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:
@@ -19,6 +19,8 @@
|
||||
- Fixed bug #48273 (snmp*_real_walk() returns SNMP errors as values).
|
||||
(Ilia, lytboris at gmail dot com)
|
||||
- Fixed bug #48247 (Crash on errors during startup). (Stas)
|
||||
- Fixed bug #47836 (array operator [] inconsistency when the array has
|
||||
PHP_INT_MAX index value). (Matt)
|
||||
- Fixed bug #46386 (Digest authentication with SOAP module fails against MSSQL
|
||||
SOAP services). (Ilia, lordelph at gmail dot com)
|
||||
- Fixed bug #42143 (The constant NAN is reported as 0 on Windows)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
+2
-2
@@ -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);
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
--TEST--
|
||||
Test array_push() function : error conditions - min and max int values as keys
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
|
||||
?>
|
||||
Test array_push() function : error conditions - max int value as key
|
||||
--FILE--
|
||||
<?php
|
||||
/* Prototype : int array_push(array $stack, mixed $var [, mixed $...])
|
||||
@@ -12,42 +8,27 @@ if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only");
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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) {
|
||||
[-2147483647]=>
|
||||
string(3) "min"
|
||||
[2147483647]=>
|
||||
string(3) "max"
|
||||
[-2147483648]=>
|
||||
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) {
|
||||
[-2147483647]=>
|
||||
string(3) "min"
|
||||
[2147483647]=>
|
||||
array(1) {
|
||||
[%d]=>
|
||||
string(3) "max"
|
||||
[-2147483648]=>
|
||||
string(3) "new"
|
||||
}
|
||||
Done
|
||||
|
||||
Reference in New Issue
Block a user