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