bug25708.phpt 3.8 KB

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