From:             
Operating system: Linux 32-bit
PHP version:      5.2.14
Package:          Scripting Engine problem
Bug Type:         Bug
Bug description:Incorrect array key cast (string to integer) when key > 
PHP_INT_MAX

Description:
------------
When using string as an array's key which looks like integer - the key is
converted to integer. That is ok for integers not bigger than PHP_INT_MAX.



But when the key is: PHP_INT_MAX < key < 3000000000 (on 32-bit system)

the key is converted to incorrect integer (it overflows :)



The key should remain string and not be converted to incorrect int.



See test script, expected and actual results.



Doc:

http://www.php.net/manual/en/language.types.array.php

A key may be either an integer or a string. If a key is the standard
representation of an integer, it will be interpreted as such (i.e. "8" will
be interpreted as 8, while "08" will be interpreted as "08").



Related bugs:

#51430

#48254

#52025

Test script:
---------------
$array['2000000000'] = 1; // ok

$array['2147483647'] = 2; // ok

$array['2147483648'] = 3; // incorrect

$array['2999999999'] = 4; // incorrect

$array['3000000000'] = 5; // ok again

var_dump($array);





Expected result:
----------------
array(5) {

  [2000000000]=>

  int(1)

  [2147483647]=>

  int(2)

  ["2147483648"]=>

  int(3)

  ["2999999999"]=>

  int(4)

  ["3000000000"]=>

  int(5)

}



Actual result:
--------------
array(5) {

  [2000000000]=>

  int(1)

  [2147483647]=>

  int(2)

  [-2147483648]=> // int key overflow

  int(3)

  [-1294967297]=> // int key overflow

  int(4)

  ["3000000000"]=>

  int(5)

}



-- 
Edit bug report at http://bugs.php.net/bug.php?id=52899&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52899&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52899&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52899&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52899&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52899&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52899&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52899&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52899&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52899&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52899&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52899&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52899&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52899&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52899&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52899&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52899&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52899&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52899&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52899&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52899&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52899&r=mysqlcfg

Reply via email to