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

1.1       misho       1: --TEST--
                      2: Bug #25708 (extract($GLOBALS, EXTR_REFS) mangles $GLOBALS)
                      3: --FILE--
                      4: <?php
                      5: function foo($ref, $alt) {
                      6:        unset($GLOBALS['a']);
                      7:        unset($GLOBALS['b']);
                      8:        $GLOBALS['a'] = 1;
                      9:        $GLOBALS['b'] = 2;
                     10: 
                     11:        $org_a = $GLOBALS['a'];
                     12:        $org_b = $GLOBALS['b'];
                     13: 
                     14:        if ($ref) {
                     15:                global $a, $b;
                     16:        } else {
                     17:                /* zval temp_var(NULL); // refcount = 1
                     18:                 * a = temp_var[x] // refcount = 2
                     19:                 */
                     20:                $a = NULL;
                     21:                $b = NULL;
                     22:        }
                     23: 
                     24:        debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
                     25:        echo "--\n";
                     26:        if ($alt) {
                     27:                $a = &$GLOBALS['a'];
                     28:                $b = &$GLOBALS['b'];
                     29:        } else {
                     30:                extract($GLOBALS, EXTR_REFS);
                     31:        }
                     32:        debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
                     33:        echo "--\n";
                     34:        $a = &$GLOBALS['a'];
                     35:        $b = &$GLOBALS['b'];
                     36:        debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
                     37:        echo "--\n";
                     38:        $GLOBALS['b'] = 3;
                     39:        debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
                     40:        echo "--\n";
                     41:        $a = 4;
                     42:        debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
                     43:        echo "--\n";
                     44:        $c = $b;
                     45:        debug_zval_dump($b, $GLOBALS['b'], $c);
                     46:        echo "--\n";
                     47:        $b = 'x';
                     48:        debug_zval_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c);
                     49:        echo "--\n";
                     50:        debug_zval_dump($org_a, $org_b);
                     51:        echo "----";
                     52:        if ($ref) echo 'r';
                     53:        if ($alt) echo 'a';
                     54:        echo "\n";
                     55: }
                     56: 
                     57: $a = 'ok';
                     58: $b = 'ok';
                     59: $_a = $a;
                     60: $_b = $b;
                     61: 
                     62: foo(false, true);
                     63: foo(true, true);
                     64: foo(false, false);
                     65: foo(true, false);
                     66: 
                     67: debug_zval_dump($_a, $_b);
                     68: ?>
                     69: --EXPECT--
                     70: NULL refcount(2)
                     71: NULL refcount(2)
                     72: long(1) refcount(3)
                     73: long(2) refcount(3)
                     74: --
                     75: long(1) refcount(1)
                     76: long(2) refcount(1)
                     77: long(1) refcount(1)
                     78: long(2) refcount(1)
                     79: --
                     80: long(1) refcount(1)
                     81: long(2) refcount(1)
                     82: long(1) refcount(1)
                     83: long(2) refcount(1)
                     84: --
                     85: long(1) refcount(1)
                     86: long(3) refcount(1)
                     87: long(1) refcount(1)
                     88: long(3) refcount(1)
                     89: --
                     90: long(4) refcount(1)
                     91: long(3) refcount(1)
                     92: long(4) refcount(1)
                     93: long(3) refcount(1)
                     94: --
                     95: long(3) refcount(1)
                     96: long(3) refcount(1)
                     97: long(3) refcount(2)
                     98: --
                     99: long(4) refcount(1)
                    100: string(1) "x" refcount(1)
                    101: long(4) refcount(1)
                    102: string(1) "x" refcount(1)
                    103: long(3) refcount(2)
                    104: --
                    105: long(1) refcount(2)
                    106: long(2) refcount(2)
                    107: ----a
                    108: long(1) refcount(1)
                    109: long(2) refcount(1)
                    110: long(1) refcount(1)
                    111: long(2) refcount(1)
                    112: --
                    113: long(1) refcount(1)
                    114: long(2) refcount(1)
                    115: long(1) refcount(1)
                    116: long(2) refcount(1)
                    117: --
                    118: long(1) refcount(1)
                    119: long(2) refcount(1)
                    120: long(1) refcount(1)
                    121: long(2) refcount(1)
                    122: --
                    123: long(1) refcount(1)
                    124: long(3) refcount(1)
                    125: long(1) refcount(1)
                    126: long(3) refcount(1)
                    127: --
                    128: long(4) refcount(1)
                    129: long(3) refcount(1)
                    130: long(4) refcount(1)
                    131: long(3) refcount(1)
                    132: --
                    133: long(3) refcount(1)
                    134: long(3) refcount(1)
                    135: long(3) refcount(2)
                    136: --
                    137: long(4) refcount(1)
                    138: string(1) "x" refcount(1)
                    139: long(4) refcount(1)
                    140: string(1) "x" refcount(1)
                    141: long(3) refcount(2)
                    142: --
                    143: long(1) refcount(2)
                    144: long(2) refcount(2)
                    145: ----ra
                    146: NULL refcount(2)
                    147: NULL refcount(2)
                    148: long(1) refcount(3)
                    149: long(2) refcount(3)
                    150: --
                    151: long(1) refcount(1)
                    152: long(2) refcount(1)
                    153: long(1) refcount(1)
                    154: long(2) refcount(1)
                    155: --
                    156: long(1) refcount(1)
                    157: long(2) refcount(1)
                    158: long(1) refcount(1)
                    159: long(2) refcount(1)
                    160: --
                    161: long(1) refcount(1)
                    162: long(3) refcount(1)
                    163: long(1) refcount(1)
                    164: long(3) refcount(1)
                    165: --
                    166: long(4) refcount(1)
                    167: long(3) refcount(1)
                    168: long(4) refcount(1)
                    169: long(3) refcount(1)
                    170: --
                    171: long(3) refcount(1)
                    172: long(3) refcount(1)
                    173: long(3) refcount(2)
                    174: --
                    175: long(4) refcount(1)
                    176: string(1) "x" refcount(1)
                    177: long(4) refcount(1)
                    178: string(1) "x" refcount(1)
                    179: long(3) refcount(2)
                    180: --
                    181: long(1) refcount(2)
                    182: long(2) refcount(2)
                    183: ----
                    184: long(1) refcount(1)
                    185: long(2) refcount(1)
                    186: long(1) refcount(1)
                    187: long(2) refcount(1)
                    188: --
                    189: long(1) refcount(1)
                    190: long(2) refcount(1)
                    191: long(1) refcount(1)
                    192: long(2) refcount(1)
                    193: --
                    194: long(1) refcount(1)
                    195: long(2) refcount(1)
                    196: long(1) refcount(1)
                    197: long(2) refcount(1)
                    198: --
                    199: long(1) refcount(1)
                    200: long(3) refcount(1)
                    201: long(1) refcount(1)
                    202: long(3) refcount(1)
                    203: --
                    204: long(4) refcount(1)
                    205: long(3) refcount(1)
                    206: long(4) refcount(1)
                    207: long(3) refcount(1)
                    208: --
                    209: long(3) refcount(1)
                    210: long(3) refcount(1)
                    211: long(3) refcount(2)
                    212: --
                    213: long(4) refcount(1)
                    214: string(1) "x" refcount(1)
                    215: long(4) refcount(1)
                    216: string(1) "x" refcount(1)
                    217: long(3) refcount(2)
                    218: --
                    219: long(1) refcount(2)
                    220: long(2) refcount(2)
                    221: ----r
                    222: string(2) "ok" refcount(2)
                    223: string(2) "ok" refcount(2)

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