#32213 [Fbk->Opn]: Array key serialize problem 64 bit php
| From: | csmith at cbbc dot murdoch dot edu dot au | Date: | Tue, 08 Mar 2005 06:33:44 +0000 |
| Subject: | #32213 [Fbk->Opn]: Array key serialize problem 64 bit php | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-75097@lists.php.net to get a copy of this message | ||
ID: 32213
User updated by: csmith at cbbc dot murdoch dot edu dot au
Reported By: csmith at cbbc dot murdoch dot edu dot au
-Status: Feedback
+Status: Open
Bug Type: Session related
Operating System: Linux
PHP Version: 5.0.3
New Comment:
Ok. Tried to compile the latest version from cvs for a AMD Opteron (64
bit server) running lunix.
It wouldn't compile. Seems to have a problem with var_unserializer :
/bin/sh /root/software/php5-200503080330/libtool --silent
--preserve-dup-deps --mode=compile gcc -Iext/standard/
-I/root/software/php5-200503080330/ext/standard/ -DPHP_ATOM_INC
-I/root/software/php5-200503080330/include
-I/root/software/php5-200503080330/main
-I/root/software/php5-200503080330
-I/root/software/php5-200503080330/Zend -I/usr/include/libxml2
-I/usr/local/include -I/root/software/php5-200503080330/TSRM -g -O2
-c /root/software/php5-200503080330/ext/standard/var_unserializer.c -o
ext/standard/var_unserializer.lo
/root/software/php5-200503080330/ext/standard/var_unserializer.c: In
function `object_custom':
/root/software/php5-200503080330/ext/standard/var_unserializer.c:296:
warning: passing arg 2 of pointer to function from incompatible pointer
type
/root/software/php5-200503080330/ext/standard/var_unserializer.c:296:
warning: passing arg 3 of pointer to function makes pointer from
integer without a cast
/root/software/php5-200503080330/ext/standard/var_unserializer.c:296:
warning: passing arg 4 of pointer to function makes integer from
pointer without a cast
/root/software/php5-200503080330/ext/standard/var_unserializer.c:296:
too few arguments to function
make: *** [ext/standard/var_unserializer.lo] Error 1
Previous Comments:
------------------------------------------------------------------------
[2005-03-07 20:09:33] sniper@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
------------------------------------------------------------------------
[2005-03-07 03:45:52] csmith at cbbc dot murdoch dot edu dot au
Description:
------------
Having this bug in 64 bit versions of php only. 32 bit versions work as
expected.
If you create an array with large integers as the keys, serialize the
array, and unserialize the array, (so you can pass it through a
session) the array key value is not being type promoted to a data type
that can store the large integer.
Instead you get a different value back as the key after unserializing
the array.
This is happening with the 64 bit versions of 5.0.3 and 4.3.2.
Reproduce code:
---------------
$array["1234567891011"] = 'test';
print "The array:<br/>";
var_dump( $array);
$array_serialized = serialize($array);
$array_unserialized = unserialize($array_serialized);
print "<br/>The unserialized array:<br/>";
var_dump($array_unserialized);
Expected result:
----------------
The array:
array(1) { [1234567891011]=> string(4) "test" }
The unserialized array:
array(1) { [1234567891011]=> string(4) "test" }
*Note: this is what you get back in the 32 bit version of php.
Actual result:
--------------
The array:
array(1) { [1234567891011]=> string(4) "test" }
The unserialized array:
array(1) { [1912277059]=> string(4) "test" }
*Note: this is what you get back in the 64 bit version of php.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=32213&edit=1