Annotation of embedaddon/php/ext/standard/tests/serialize/bug65806.phpt, revision 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>