ID: 14134
Updated by: derick
Reported By: [EMAIL PROTECTED]
Status: Analyzed
Old Bug Type: Variables related
Bug Type: Scripting Engine problem
Operating System: Linux
PHP Version: 4.0.6
Assigned To: derick
New Comment:

Ok, as I have no time to look into a fix (if it's even do-able), I'll explain here why 
it happens:

The parser embedded in PHP, does not take "-2147483648" as a string to convert (with 
strtol) to a unsigned integer, but it instead does this:

1. it tries to convert "2147483648" to a unsigned integer (which fails)
2. it tries to substract this from 0, ie. 0 - 2147483648.

Because the conversion to a unsigned long fails in the first step, it gets converted 
to a floating point number, which is substracted from 0.

A way to solve this can be to add constants for these outher limits, ie. INT_MIN (for 
-2147483648) and INT_MAX (for 2147483647).

Derick

Previous Comments:
------------------------------------------------------------------------

[2001-11-20 03:31:18] [EMAIL PROTECTED]

Found the problem. I'll try to make a fix this evening.

Derick

------------------------------------------------------------------------

[2001-11-20 03:02:55] [EMAIL PROTECTED]

Checking this out

------------------------------------------------------------------------

[2001-11-20 02:34:05] [EMAIL PROTECTED]

When assigning the value -2147483648 to a variable, the variable becomes a double, 
even though the value is within the range of integers. In fact, assigning -2147483647 
- 1 works, as does using intval("-2147483648").

The following script demonstrates, and can be accessed at 
<http://www.randomsample.org/tests/test-int-min.php>.

<?php
$int_max = 2147483647;
$int_min = -2147483648;
$int_min_alt = -2147483647 - 1;
?>
<html><head><title>Test INT_MIN</title></head>
<body>
<p>Type of "2147483647": <?php echo gettype( $int_max ); ?>
   (value = <?php echo $int_max; ?>)</p>
<p>Type of "-2147483648": <?php echo gettype( $int_min ); ?>
   (value = <?php echo $int_min; ?>)</p>
<p>Type of "-2147483647 - 1": <?php echo gettype( $int_min_alt ); ?>
   (value = <?php echo $int_min_alt; ?>)</p>
</body>
</html>

This is an ISP-provided build, but the configure line from phpinfo() is:
'./configure' '--with-config-file-path=/etc' '--enable-safe-mode=yes' 
'--enable-force-cgi-redirect=yes' '--with-gdbm' '--with-mysql' 
'--with-exec-dir=/www/cgi-bin' '--bindir=/www/cgi-bin' '--enable-ftp' 
'--enable-trans-sid' '--with-gd=/usr' '--with-zlib=/usr' '--with-jpeg-dir=/usr' 
'--enable-gd-native-ttf' '--with-png-dir=/usr' '--with-ttf=/usr/lib'


------------------------------------------------------------------------



Edit this bug report at http://bugs.php.net/?id=14134&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to