From: Operating system: WIN32 PHP version: 5.3.3 Package: *Programming Data Structures Bug Type: Bug Bug description:serialize() loses reference to root
Description: ------------ When trying to serialize -> unserialize a structure (i.e. array) containing a child (or a subordinate child) referencing the root element (meaning the structure to serialize) itself, it will be lost afterwards. This leads to annoying misbehaviour and memory abuse. If I unserialize the "correct" serialized string, it works correctly. May be its a bug in reference creation?! Test script: --------------- $Array = array( 'a' => 1 ); $Array['b'] = &$Array; echo "print_r():\n"; echo "----------\n"; print_r($Array); echo "\n"; echo "serialize():\n"; echo "------------\n"; echo serialize($Array); echo "\n\n"; echo "print_r(unserialize(serialize())):\n"; echo "----------------------------------\n"; print_r(unserialize(serialize($Array))); echo "\n"; echo "*** modify referenced value ***\n\n"; $Array['a'] = 2; echo "print_r():\n"; echo "----------\n"; print_r($Array); echo "\n"; echo "*** modify re-serialized refererenced value ***\n\n"; $Array['a'] = 1; $Array = unserialize(serialize($Array)); $Array['a'] = 2; echo "print_r():\n"; echo "----------\n"; print_r($Array); echo "\n"; echo "*** using correct value ***\n\n"; $Array = unserialize('a:2:{s:1:"a";i:1;s:1:"b";R:1;}'); echo "print_r():\n"; echo "----------\n"; print_r($Array); echo "\n"; Expected result: ---------------- print_r(): ---------- Array ( [a] => 1 [b] => Array *RECURSION* ) serialize(): ------------ a:2:{s:1:"a";i:1;s:1:"b";R:1;} print_r(unserialize(serialize())): ---------------------------------- Array ( [a] => 1 [b] => Array *RECURSION* ) *** modify referenced value *** print_r(): ---------- Array ( [a] => 2 [b] => Array *RECURSION* ) *** modify re-serialized refererenced value *** print_r(): ---------- Array ( [a] => 2 [b] => Array *RECURSION* ) *** using correct value *** print_r(): ---------- Array ( [a] => 1 [b] => Array *RECURSION* ) Actual result: -------------- print_r(): ---------- Array ( [a] => 1 [b] => Array ( [a] => 1 [b] => Array *RECURSION* ) ) serialize(): ------------ a:2:{s:1:"a";i:1;s:1:"b";a:2:{s:1:"a";i:1;s:1:"b";R:3;}} print_r(unserialize(serialize())): ---------------------------------- Array ( [a] => 1 [b] => Array ( [a] => 1 [b] => Array *RECURSION* ) ) *** modify referenced value *** print_r(): ---------- Array ( [a] => 2 [b] => Array ( [a] => 2 [b] => Array *RECURSION* ) ) *** modify re-serialized refererenced value *** print_r(): ---------- Array ( [a] => 2 [b] => Array ( [a] => 1 [b] => Array *RECURSION* ) ) *** using correct value *** print_r(): ---------- Array ( [a] => 1 [b] => Array *RECURSION* ) -- Edit bug report at http://bugs.php.net/bug.php?id=52521&edit=1 -- Try a snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=52521&r=trysnapshot52 Try a snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=52521&r=trysnapshot53 Try a snapshot (trunk): http://bugs.php.net/fix.php?id=52521&r=trysnapshottrunk Fixed in SVN: http://bugs.php.net/fix.php?id=52521&r=fixed Fixed in SVN and need be documented: http://bugs.php.net/fix.php?id=52521&r=needdocs Fixed in release: http://bugs.php.net/fix.php?id=52521&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=52521&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=52521&r=needscript Try newer version: http://bugs.php.net/fix.php?id=52521&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=52521&r=support Expected behavior: http://bugs.php.net/fix.php?id=52521&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=52521&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=52521&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=52521&r=globals PHP 4 support discontinued: http://bugs.php.net/fix.php?id=52521&r=php4 Daylight Savings: http://bugs.php.net/fix.php?id=52521&r=dst IIS Stability: http://bugs.php.net/fix.php?id=52521&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=52521&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=52521&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=52521&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=52521&r=mysqlcfg