Bug #51397 [Ver->Bgs]: Math calculation bug
Edit report at http://bugs.php.net/bug.php?id=51397&edit=1
ID: 51397
Updated by: tony2001@php.net
Reported by: emanuel dot dejanu at humaninfo dot ro
Summary: Math calculation bug
-Status: Verified
+Status: Bogus
Type: Bug
Package: Scripting Engine problem
Operating System: FREEBSD & LINUX
PHP Version: 5.2.13
New Comment:
>It looks to me that this code has an integer overflow at some point
Yep.
And it's easy to see where exactly it overflows:
Add var_dump($h); at the end of for() loop, you'll see it yourself:
int(177638)
int(5862122)
int(193450012)
int(2088883122)
int(213666243)
int(-1538948595)
int(754303898)
int(754303898)
Previous Comments:
------------------------------------------------------------------------
[2010-04-25 12:46:01] pajoye@php.net
It looks to me that this code has an integer overflow at some point. I
would suggest to use ext/hash if you need reliable hashes or add integer
overflow checks in your code.
This behavior can't be seen on windows. On this platform the long type
has the same size, no matter the architecture (32bit on both x64 and
x86).
------------------------------------------------------------------------
[2010-04-25 12:29:10] cimodev at me dot com
My Result on OpenSuse 11.0 - 64bit with PHP 5.3.2:
229416432419738
-----
On Debian 64bit:
PHP 5.3.2-0.dotdeb.1 with Suhosin-Patch (cli) (built: Mar 9 2010
11:42:01)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Suhosin v0.9.29, Copyright (c) 2007, by SektionEins GmbH
229416432419738
Maybe this bug occurres primarily on 32bit systems... I have none here
for testing
------------------------------------------------------------------------
[2010-04-22 21:54:37] whatrevolution at yahoo dot com
My answer to myhash('CL6.1.7'): 229416432419738
PHP Version 5.2.10-2ubuntu6.4
System Linux 2.6.31-20-generic x86_64
Build Date Jan 6 2010 22:36:47
Server API Apache 2.0 Handler
PHP API 20041225
PHP Extension 20060613
Zend Extension 220060519
Debug Build no
Thread Safety disabled
Zend Memory Manager enabled
Apache/2.2.12 (Ubuntu)
------------------------------------------------------------------------
[2010-03-26 11:56:42] fa@php.net
Verified with 5.2.13 on Debian (default configure)
Verified in the Debian 5.2.6+lenny4 PHP (just for completeness)
Correct result with 5.3.2 on Gentoo
------------------------------------------------------------------------
[2010-03-26 08:20:19] emanuel dot dejanu at humaninfo dot ro
Description:
------------
I have used the code from the test script on my development machine
(Windows Professional 7 32bit) with php 5.2.12 and is working correctly
but when I have deployed on my production machine that is FreeBSD 6.3
32bit with the same php version 5.2.12 is giving wrong results
(-2147483593). I also run this on other production machine that is
RedHat 5 32bit with php 5.2.6 and is also giving wrong results
(-2147483593).
I can not test with php 5.2.13 on production machines (virtual
hosting).
On windows is giving the correctly result (754303898) with PHP 5.2.12
and PHP 5.3.1. I am running in 32bit platform on all machines.
-------------------------------------------------------------------
PHP_INT_SIZE: 4
System => FreeBSD somehost.com 6.3-RELEASE FreeBSD 6.3-RELEASE #6: Wed
Oc
t 21 09:32:42 MDT 2009 root@fc:/usr/src/sys/i386/compile/VKERN i386
Build Date => Mar 3 2010 12:51:00
Configure Command => './configure' '--with-layout=GNU'
'--with-config-file-sca
n-dir=/usr/local/etc/php' '--disable-all' '--enable-libxml'
'--with-libxml-dir=/
usr/local' '--enable-reflection' '--program-prefix='
'--enable-fastcgi'
'--with-
apxs2=/usr/local/sbin/apxs' '--with-regex=php' '--with-zend-vm=CALL'
'--prefix=/
usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/'
'--build=i386-
portbld-freebsd6.3'
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /usr/local/etc
Loaded Configuration File => /usr/local/etc/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php
additional .ini files parsed => /usr/local/etc/php/extensions.ini
PHP API => 20041225
PHP Extension => 20060613
Zend Extension => 220060519
Debug Build => no
Test script:
---------------
function myhash($key) {
$h = 5381;
$l = strlen($key);
for($i = 0; $i < $l; ++$i) {
$h = (($h << 5) + $h) ^ ord($key[$i]);
}
return $h;
}
$h = myhash('CL6.1.7');
if ($h != 754303898)
echo "bug\n";
echo $h . "\n";
Expected result:
----------------
754303898
Actual result:
--------------
bug
-2147483593
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51397&edit=1
Thread (6 messages)