Edit report at https://bugs.php.net/bug.php?id=64206&edit=1
ID: 64206 Updated by: m...@php.net Reported by: cameron dot junge at sella dot co dot nz Summary: Serialized object becomes r:2, which breaks unserialization Status: Verified Type: Bug Package: Scripting Engine problem Operating System: Ubuntu 12.10 PHP Version: 5.4.11 Assigned To: mike Block user comment: N Private report: N New Comment: After a quick look, I think the problem is rather the unserialize() call in the serialize() callback and vice-versa. Previous Comments: ------------------------------------------------------------------------ [2013-02-20 03:33:16] larue...@php.net I tried to fix this by lock the serialize hash before calling ce->serialize, but it break #36424, result a stack overflow segfault. ------------------------------------------------------------------------ [2013-02-13 22:17:34] cameron dot junge at sella dot co dot nz Description: ------------ When trying to serialize an inherited object, PHP 5.4 serializes the inherited object as a reference to the parent object, when there is no parent object to reference. This works fine in PHP 5.3. See test script for an example. Test script: --------------- class A implements \Serializable { public function serialize() { $s = new \stdClass(); $s->id = 1; var_dump($s); return serialize($s); } public function unserialize($s) { } } class B extends A { public function serialize() { $p = parent::serialize(); $s = unserialize($p); $s->foo = 'bar'; $s2 = serialize($s); var_dump($p, $s, $s2); // $s2 = 'r:2' //var_dump(unserialize($s2)); // will throw error as can't unserialize die; //return serialize($s); } } $b = new B; serialize($b); Expected result: ---------------- // PHP5.3.6 object(stdClass)[794] public 'id' => int 1 string 'O:8:"stdClass":1:{s:2:"id";i:1;}' (length=32) object(stdClass)[794] public 'id' => int 1 public 'foo' => string 'bar' (length=3) string 'O:8:"stdClass":2:{s:2:"id";i:1;s:3:"foo";s:3:"bar";}' (length=52) Actual result: -------------- // PHP 5.4.11 object(stdClass)[794] public 'id' => int 1 string 'O:8:"stdClass":1:{s:2:"id";i:1;}' (length=32) object(stdClass)[794] public 'id' => int 1 public 'foo' => string 'bar' (length=3) string 'r:2;' (length=4) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=64206&edit=1