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