Annotation of embedaddon/php/ext/standard/tests/serialize/bug36424.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Bug #36424 - Serializable interface breaks object references
! 3: --FILE--
! 4: <?php
! 5:
! 6: echo "-TEST\n";
! 7:
! 8: class a implements Serializable {
! 9: function serialize() {
! 10: return serialize(get_object_vars($this));
! 11: }
! 12: function unserialize($s) {
! 13: foreach (unserialize($s) as $p=>$v) {
! 14: $this->$p=$v;
! 15: }
! 16: }
! 17: }
! 18: class b extends a {}
! 19: class c extends b {}
! 20:
! 21: $c = new c;
! 22: $c->a = new a;
! 23: $c->a->b = new b;
! 24: $c->a->b->c = $c;
! 25: $c->a->c = $c;
! 26: $c->a->b->a = $c->a;
! 27: $c->a->a = $c->a;
! 28:
! 29: $s = serialize($c);
! 30: printf("%s\n", $s);
! 31:
! 32: $d = unserialize($s);
! 33:
! 34: var_dump(
! 35: $d === $d->a->b->c,
! 36: $d->a->a === $d->a,
! 37: $d->a->b->a === $d->a,
! 38: $d->a->c === $d
! 39: );
! 40:
! 41: print_r($d);
! 42:
! 43: echo "Done\n";
! 44:
! 45: ?>
! 46: --EXPECTF--
! 47: %aTEST
! 48: C:1:"c":108:{a:1:{s:1:"a";C:1:"a":81:{a:3:{s:1:"b";C:1:"b":30:{a:2:{s:1:"c";r:1;s:1:"a";r:3;}}s:1:"c";r:1;s:1:"a";r:3;}}}}
! 49: bool(true)
! 50: bool(true)
! 51: bool(true)
! 52: bool(true)
! 53: c Object
! 54: (
! 55: [a] => a Object
! 56: (
! 57: [b] => b Object
! 58: (
! 59: [c] => c Object
! 60: *RECURSION*
! 61: [a] => a Object
! 62: *RECURSION*
! 63: )
! 64:
! 65: [c] => c Object
! 66: *RECURSION*
! 67: [a] => a Object
! 68: *RECURSION*
! 69: )
! 70:
! 71: )
! 72: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>