bug29493.phpt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. var_dump($a, $b);
  17. extract($a, EXTR_REFS);
  18. $foo = 'noo';
  19. var_dump($a, $b);
  20. }
  21. function t2()
  22. {
  23. $a = array('foo' => 'aaa');
  24. // refcount($a) = 1
  25. // refcount($a['foo']) = 1
  26. $b = &$a;
  27. // refcount($a) = 2
  28. // is_ref($a) = true
  29. // refcount($a['foo']) = 1
  30. $b['foo'] = 'bbb';
  31. // refcount($a) = 2
  32. // refcount($a['foo']) = 1
  33. var_dump($a, $b);
  34. extract($a, EXTR_REFS);
  35. $foo = 'noo';
  36. var_dump($a, $b);
  37. }
  38. function t3()
  39. {
  40. $a = array('foo' => 'aaa');
  41. // refcount($a) = 1
  42. // refcount($a['foo']) = 1
  43. $b = &$a;
  44. // refcount($a) = 2
  45. // is_ref($a) = true
  46. // refcount($a['foo']) = 1
  47. unset($b);
  48. // refcount($a) = 1
  49. // is_ref($a) = true
  50. // refcount($a['foo']) = 1
  51. var_dump($a);
  52. extract($a, EXTR_REFS);
  53. $foo = 'noo';
  54. var_dump($a);
  55. }
  56. t1();
  57. t2();
  58. t3();
  59. ?>
  60. --EXPECT--
  61. array(1) {
  62. ["foo"]=>
  63. string(3) "aaa"
  64. }
  65. array(1) {
  66. ["foo"]=>
  67. string(3) "bbb"
  68. }
  69. array(1) {
  70. ["foo"]=>
  71. &string(3) "noo"
  72. }
  73. array(1) {
  74. ["foo"]=>
  75. string(3) "bbb"
  76. }
  77. array(1) {
  78. ["foo"]=>
  79. string(3) "bbb"
  80. }
  81. array(1) {
  82. ["foo"]=>
  83. string(3) "bbb"
  84. }
  85. array(1) {
  86. ["foo"]=>
  87. &string(3) "noo"
  88. }
  89. array(1) {
  90. ["foo"]=>
  91. &string(3) "noo"
  92. }
  93. array(1) {
  94. ["foo"]=>
  95. string(3) "aaa"
  96. }
  97. array(1) {
  98. ["foo"]=>
  99. &string(3) "noo"
  100. }