bug25708.phpt 2.4 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. var_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. var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
  30. echo "--\n";
  31. $a = &$GLOBALS['a'];
  32. $b = &$GLOBALS['b'];
  33. var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
  34. echo "--\n";
  35. $GLOBALS['b'] = 3;
  36. var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
  37. echo "--\n";
  38. $a = 4;
  39. var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b']);
  40. echo "--\n";
  41. $c = $b;
  42. var_dump($b, $GLOBALS['b'], $c);
  43. echo "--\n";
  44. $b = 'x';
  45. var_dump($a, $b, $GLOBALS['a'], $GLOBALS['b'], $c);
  46. echo "--\n";
  47. var_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. var_dump($_a, $_b);
  62. ?>
  63. --EXPECT--
  64. NULL
  65. NULL
  66. int(1)
  67. int(2)
  68. --
  69. int(1)
  70. int(2)
  71. int(1)
  72. int(2)
  73. --
  74. int(1)
  75. int(2)
  76. int(1)
  77. int(2)
  78. --
  79. int(1)
  80. int(3)
  81. int(1)
  82. int(3)
  83. --
  84. int(4)
  85. int(3)
  86. int(4)
  87. int(3)
  88. --
  89. int(3)
  90. int(3)
  91. int(3)
  92. --
  93. int(4)
  94. string(1) "x"
  95. int(4)
  96. string(1) "x"
  97. int(3)
  98. --
  99. int(1)
  100. int(2)
  101. ----a
  102. int(1)
  103. int(2)
  104. int(1)
  105. int(2)
  106. --
  107. int(1)
  108. int(2)
  109. int(1)
  110. int(2)
  111. --
  112. int(1)
  113. int(2)
  114. int(1)
  115. int(2)
  116. --
  117. int(1)
  118. int(3)
  119. int(1)
  120. int(3)
  121. --
  122. int(4)
  123. int(3)
  124. int(4)
  125. int(3)
  126. --
  127. int(3)
  128. int(3)
  129. int(3)
  130. --
  131. int(4)
  132. string(1) "x"
  133. int(4)
  134. string(1) "x"
  135. int(3)
  136. --
  137. int(1)
  138. int(2)
  139. ----ra
  140. NULL
  141. NULL
  142. int(1)
  143. int(2)
  144. --
  145. int(1)
  146. int(2)
  147. int(1)
  148. int(2)
  149. --
  150. int(1)
  151. int(2)
  152. int(1)
  153. int(2)
  154. --
  155. int(1)
  156. int(3)
  157. int(1)
  158. int(3)
  159. --
  160. int(4)
  161. int(3)
  162. int(4)
  163. int(3)
  164. --
  165. int(3)
  166. int(3)
  167. int(3)
  168. --
  169. int(4)
  170. string(1) "x"
  171. int(4)
  172. string(1) "x"
  173. int(3)
  174. --
  175. int(1)
  176. int(2)
  177. ----
  178. int(1)
  179. int(2)
  180. int(1)
  181. int(2)
  182. --
  183. int(1)
  184. int(2)
  185. int(1)
  186. int(2)
  187. --
  188. int(1)
  189. int(2)
  190. int(1)
  191. int(2)
  192. --
  193. int(1)
  194. int(3)
  195. int(1)
  196. int(3)
  197. --
  198. int(4)
  199. int(3)
  200. int(4)
  201. int(3)
  202. --
  203. int(3)
  204. int(3)
  205. int(3)
  206. --
  207. int(4)
  208. string(1) "x"
  209. int(4)
  210. string(1) "x"
  211. int(3)
  212. --
  213. int(1)
  214. int(2)
  215. ----r
  216. string(2) "ok"
  217. string(2) "ok"