Annotation of embedaddon/php/ext/standard/tests/serialize/bug65806.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Bug #65806 (unserialize fails with object which is referenced multiple times)
3: --FILE--
4: <?php
5: class myObjA {}
6: class myObjB {
7: public $attrA;
8: public $attrB;
9: }
10: class myObjC {
11: public $attrC;
12: public $attrD;
13: }
14: class myList {
15: private $_serialized;
16: private $_obj;
17:
18: public function __construct($obj)
19: {
20: $this->_obj = $obj;
21: $this->_serialized = serialize($this->_obj);
22: }
23: public function get()
24: {
25: return $this->_obj;
26: }
27: public function __sleep()
28: {
29: $this->_serialized = serialize($this->_obj);
30: return array(
31: "\0" . __CLASS__ . "\0_serialized",
32: );
33: }
34: public function __wakeup()
35: {
36: $this->_obj = unserialize($this->_serialized);
37: }
38: }
39:
40: echo "SCRIPT START" . PHP_EOL;
41:
42: $objA = new myObjA();
43: $objB = new myObjB();
44: $objC = new myObjC();
45:
46: $objB->attrA = new ArrayIterator();
47: $objB->attrB = $objA;
48:
49: $objC->attrC = $objB;
50: $objC->attrD = $objA;
51:
52: $list = new myList($objC);
53:
54: echo 'check ' . check($list->get()) . PHP_EOL;
55:
56: echo "start serialize/unserialize" . PHP_EOL;
57: $newList = unserialize(serialize($list));
58: echo "finish serialize/unserialize" . PHP_EOL;
59:
60: //after unserialize the property myObjC::attrD is null instead of expected object
61: echo 'check ' . check($newList->get()) . PHP_EOL;
62:
63: echo "SCRIPT END" . PHP_EOL ;
64:
65: function check(myObjC $obj) {
66:
67: if (!is_object($obj->attrC)) {
68: return 'failed (myObjC::attrC => ' . var_export($obj->attrC, true) . ')';
69: }
70: if (!is_object($obj->attrD)) {
71: return 'failed (myObjC::attrD => ' . var_export($obj->attrD, true) . ')';
72: }
73: return 'successful';
74: }
75: ?>
76: --EXPECT--
77: SCRIPT START
78: check successful
79: start serialize/unserialize
80: finish serialize/unserialize
81: check successful
82: SCRIPT END
83:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>