#28800 [Ver->Csd]: Strings beginning with "inf" improperly converted
| From: | iliaa@php.net | Date: | Fri, 16 Jul 2004 02:24:54 +0000 |
| Subject: | #28800 [Ver->Csd]: Strings beginning with "inf" improperly converted | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-62432@lists.php.net to get a copy of this message | ||
ID: 28800
Updated by: iliaa@php.net
Reported By: pmichaud at pobox dot com
-Status: Verified
+Status: Closed
Bug Type: Scripting Engine problem
Operating System: Linux
PHP Version: 4.3.6, 5.0.0RC2
New Comment:
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2004-06-28 12:35:23] rasmus@php.net
Verified that this is indeed the case. Since we are using strtol()
internally here, I would actually expect INF for both your "inf" and
"infinity" cases. The strtol() spec says that this should be the
result. And a quick local check verifies this, but the others
definitely shouldn't be returning INF. It looks like we are not
checking the end pointer returned from strtol() at all in any of our
conversion functions. We need something like this:
l = strtol(s, &endp, 0);
if (s != endp && *endp == `\0') {
... valid conversion ...
}
------------------------------------------------------------------------
[2004-06-20 05:08:46] pmichaud at pobox dot com
Changed PHP version number to note bug exists in 5.0.0RC2.
------------------------------------------------------------------------
[2004-06-20 05:05:27] pmichaud at pobox dot com
Changed PHP version number to note reports of bug in many versions of
PHP.
------------------------------------------------------------------------
[2004-06-20 04:49:31] pmichaud at pobox dot com
Changed bug category.
------------------------------------------------------------------------
[2004-06-15 22:26:40] pmichaud at pobox dot com
Description:
------------
PHP seems to incorrectly convert strings beginning with "inf" to INF
(infinity). This includes converting strings such as "info" and
"inflammable". Surprisingly, the strings "inf" and "infinity" do
*not*
convert to infinity but correctly become zeros. A script that
illustrates the problem is given below:
This is very annoying because one cannot simply do a test for a
positive number with code such as
if ($x>0) { echo "$x is positive"; }
because if $x is any string beginning with "inf" (but not "inf" or
"infinity") it is treated as a positive number.
Pm
Reproduce code:
---------------
Here's a script that illustrates the problem:
<?php
header("Content-type: text/plain");
$a = "into";
$b = "info";
$c = "inf";
$d = "infinity";
$e = "infin";
$f = "inflammable";
echo "a: $a == ",$a+0,"\n"; # outputs 0 (correct)
echo "b: $b == ",$b+0,"\n"; # outputs INF, incorrect!
echo "c: $c == ",$c+0,"\n"; # outputs 0 (?!)
echo "d: $d == ",$d+0,"\n"; # outputs 0 (?!)
echo "e: $e == ",$e+0,"\n"; # outputs INF, incorrect!
echo "f: $f == ",$f+0,"\n"; # outputs INF, incorrect!
?>
Expected result:
----------------
a: into == 0
b: info == 0
c: inf == 0
d: infinity == 0
e: infin == 0
f: inflammable == 0
Actual result:
--------------
a: into == 0
b: info == INF
c: inf == 0
d: infinity == 0
e: infin == INF
f: inflammable == INF
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=28800&edit=1