]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #47836 (array operator [] inconsistency when the array has PHP_INT_MAX...
authorMatt Wilmas <mattwil@php.net>
Sun, 7 Jun 2009 19:28:15 +0000 (19:28 +0000)
committerMatt Wilmas <mattwil@php.net>
Sun, 7 Jun 2009 19:28:15 +0000 (19:28 +0000)
Also simplified related array_push() test

Zend/tests/bug47836.phpt [new file with mode: 0644]
Zend/zend_hash.c
ext/standard/tests/array/array_push_error2.phpt

diff --git a/Zend/tests/bug47836.phpt b/Zend/tests/bug47836.phpt
new file mode 100644 (file)
index 0000000..5a93a44
--- /dev/null
@@ -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)
+}
index f96076653521659f7272d7c05d55a5055b81d7fb..e243d0fac7e4ffd6192ade1e285d288b40bb38f7 100644 (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);
index e52c91cabaa2c25ed4e3bc48cf4e733874044b1e..5d7b655a42615867fe0eb291b25afa314d22e37d 100644 (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
\ No newline at end of file