#50970 [Opn->Fbk]: force convert a string into int using (int) or intval() cause value truncate
ID: 50970
Updated by: jani@php.net
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
Thread (7 messages)