Annotation of embedaddon/php/ext/standard/tests/array/bug29493.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Bug #29493 (extract(EXTR_REFS) fails if array has multiple referrals)
                      3: --FILE--
                      4: <?php
                      5: function t1()
                      6: {
                      7:        $a = array('foo' => 'aaa');
                      8:        // refcount($a) = 1
                      9:        // refcount($a['foo']) = 1
                     10:        $b = $a;
                     11:        // refcount($a) = 2
                     12:        // refcount($a['foo']) = 1
                     13:        $b['foo'] = 'bbb';
                     14:        // refcount($a) = 1
                     15:        // refcount($a['foo']) = 1
                     16: 
                     17:        var_dump($a, $b);
                     18: 
                     19:        extract($a, EXTR_REFS);
                     20: 
                     21:        $foo = 'noo';
                     22: 
                     23:        var_dump($a, $b);
                     24: }
                     25: 
                     26: function t2()
                     27: {
                     28:        $a = array('foo' => 'aaa');
                     29:        // refcount($a) = 1
                     30:        // refcount($a['foo']) = 1
                     31:        $b = &$a;
                     32:        // refcount($a) = 2
                     33:        // is_ref($a) = true
                     34:        // refcount($a['foo']) = 1
                     35:        $b['foo'] = 'bbb';
                     36:        // refcount($a) = 2
                     37:        // refcount($a['foo']) = 1
                     38: 
                     39:        var_dump($a, $b);
                     40: 
                     41:        extract($a, EXTR_REFS);
                     42: 
                     43:        $foo = 'noo';
                     44: 
                     45:        var_dump($a, $b);
                     46: }
                     47: 
                     48: function t3()
                     49: {
                     50:        $a = array('foo' => 'aaa');
                     51:        // refcount($a) = 1
                     52:        // refcount($a['foo']) = 1
                     53:        $b = &$a;
                     54:        // refcount($a) = 2
                     55:        // is_ref($a) = true
                     56:        // refcount($a['foo']) = 1
                     57:        unset($b);
                     58:        // refcount($a) = 1
                     59:        // is_ref($a) = true
                     60:        // refcount($a['foo']) = 1
                     61: 
                     62:        var_dump($a);
                     63: 
                     64:        extract($a, EXTR_REFS);
                     65: 
                     66:        $foo = 'noo';
                     67: 
                     68:        var_dump($a);
                     69: }
                     70: 
                     71: t1();
                     72: t2();
                     73: t3();
                     74: ?>
                     75: --EXPECT--
                     76: array(1) {
                     77:   ["foo"]=>
                     78:   string(3) "aaa"
                     79: }
                     80: array(1) {
                     81:   ["foo"]=>
                     82:   string(3) "bbb"
                     83: }
                     84: array(1) {
                     85:   ["foo"]=>
                     86:   &string(3) "noo"
                     87: }
                     88: array(1) {
                     89:   ["foo"]=>
                     90:   string(3) "bbb"
                     91: }
                     92: array(1) {
                     93:   ["foo"]=>
                     94:   string(3) "bbb"
                     95: }
                     96: array(1) {
                     97:   ["foo"]=>
                     98:   string(3) "bbb"
                     99: }
                    100: array(1) {
                    101:   ["foo"]=>
                    102:   &string(3) "noo"
                    103: }
                    104: array(1) {
                    105:   ["foo"]=>
                    106:   &string(3) "noo"
                    107: }
                    108: array(1) {
                    109:   ["foo"]=>
                    110:   string(3) "aaa"
                    111: }
                    112: array(1) {
                    113:   ["foo"]=>
                    114:   &string(3) "noo"
                    115: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>