ID: 50970 Updated by: [email protected] Reported By: zhangsilly at gmail dot com -Status: Open +Status: Feedback Bug Type: Scripting Engine problem Operating System: Windows XP PHP Version: 5.2.12 New Comment:
Please try using this snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://windows.php.net/snapshots/ Works fine for me with Linux.. Previous Comments: ------------------------------------------------------------------------ [2010-02-10 01:48:54] zhangsilly at gmail dot com this is cause by strtol, used in the ZEND_API convert_to_long_base(zval *op, int base), which is defined in stdlib.h. strtol will always return LONG_MAX if the string stands for a number which is larger than LONG_MAX. I'am afraid no matter zend_parse_parameters and convert_to_long, the should have the same behavior. This whill cause a situation that when i pass a string which is readed from file or socket to long2ip, long2ip($str) is right but long2ip((int)$str) will be failed. ------------------------------------------------------------------------ [2010-02-09 01:29:31] zhangsilly at gmail dot com Description: ------------ use (int) or intval() to convert a string into integer in userland, if bigger than 2147483647, this will result a truncate, the value will always be 2147483647. but use zend_parse_parameters to parse the string as a long arguement, is do give the correct value in nagtive format Reproduce code: --------------- /** * assert failure * (int)3740925952 result is -554041344 * (int)'3740925952' result is 2147483647 */ assert((int)3740925952 == (int)'3740925952'); Expected result: ---------------- assert should be succeed Actual result: -------------- assert failure ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=50970&edit=1
