]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #46649 (Setting array element with that same array produces
authorArnaud Le Blanc <lbarnaud@php.net>
Sun, 23 Nov 2008 20:36:32 +0000 (20:36 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Sun, 23 Nov 2008 20:36:32 +0000 (20:36 +0000)
inconsistent results)

NEWS
Zend/tests/bug38469.phpt
Zend/zend_compile.c

diff --git a/NEWS b/NEWS
index 7c4043f9540fbb9d5aa0021620d7abd34a2cc654..b06261481a1036f24a275fbedc1942781aa9a3f0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? Nov 2008, PHP 5.2.7
 - Fixed memory leak inside readline_callback_handler_remove() function. (Felipe)
+- Fixed bug #46649 (Setting array element with that same array produces 
+  inconsistent results). (Arnaud)
 - Fixed bug #46643 (Upgraded PCRE to 7.8)
 
 20 Nov 2008, PHP 5.2.7RC4
index db507df357226ab2a37c4cbf79274982785609f5..6afcaf5fd32f6b8d0db37a308ff672a58864bda8 100644 (file)
@@ -8,6 +8,16 @@ var_dump($a);
 $b = array(array());
 $b[0][0] = $b;
 var_dump($b);
+
+function f() {
+       $a = array();
+       $a[0] = $a;
+       var_dump($a);
+       $b = array(array());
+       $b[0][0] = $b;
+       var_dump($b);
+}
+f();
 ?>
 --EXPECT--
 array(1) {
@@ -26,3 +36,19 @@ array(1) {
     }
   }
 }
+array(1) {
+  [0]=>
+  array(0) {
+  }
+}
+array(1) {
+  [0]=>
+  array(1) {
+    [0]=>
+    array(1) {
+      [0]=>
+      array(0) {
+      }
+    }
+  }
+}
index 22a7135e2111aeb5c841bc54a2b4b451d9428a41..e0c25c2d4419060239ba6707ac3aa0ba38101b8a 100644 (file)
@@ -565,6 +565,7 @@ void zend_do_assign(znode *result, znode *variable, znode *value TSRMLS_DC)
                                        CG(active_op_array)->vars[value->u.var].name, 
                                        CG(active_op_array)->vars[value->u.var].name_len, 1);
                                SET_UNUSED(opline->op2);
+                               opline->op2.u.EA.type = ZEND_FETCH_LOCAL;
                                value = &opline->result;
                        }
                }