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

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

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 da547211b521a683043c91890abb059d563e017d..ca3695f9bf929225ce9cf906fbe5039fef24dd87 100644 (file)
@@ -635,6 +635,7 @@ void zend_do_assign(znode *result, znode *variable, const 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;
                        }
                }