]> granicus.if.org Git - php/commitdiff
fix bug reported by Henrique
authorAntony Dovgal <tony2001@php.net>
Sun, 10 Aug 2008 21:23:21 +0000 (21:23 +0000)
committerAntony Dovgal <tony2001@php.net>
Sun, 10 Aug 2008 21:23:21 +0000 (21:23 +0000)
add test

Zend/tests/foreach_unset_globals.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/foreach_unset_globals.phpt b/Zend/tests/foreach_unset_globals.phpt
new file mode 100644 (file)
index 0000000..1cc03f2
--- /dev/null
@@ -0,0 +1,21 @@
+--TEST--
+traverse an array and use its keys to unset GLOBALS
+--FILE--
+<?php
+
+$arr = array("a" => 1, "b" => 2);
+foreach ($arr as $key => $val) {
+       unset($GLOBALS[$key]);
+}
+
+var_dump($arr);
+echo "Done\n";
+?>
+--EXPECTF--    
+array(2) {
+  [u"a"]=>
+  int(1)
+  [u"b"]=>
+  int(2)
+}
+Done
index efea17dd9f7cab75a883d9433a8cf4d102993b85..a94c9135411a51c0d808aac7761b0906c92f15bf 100644 (file)
@@ -3554,7 +3554,9 @@ ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|UNUSED|CV, CONST|TMP|VAR|CV)
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (OP2_TYPE == IS_CV || OP2_TYPE == IS_VAR) {
+                                               }
+                                               
+                                               if (OP2_TYPE == IS_CV || OP2_TYPE == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
index 1420a54bc51e663b918d3ec38468db74874b3bbc..0d49701a36f8424cedf81d7d0428b4a457fd36a6 100644 (file)
@@ -11078,7 +11078,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HAND
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+                                               }
+
+                                               if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -12920,7 +12922,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLE
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
+                                               }
+
+                                               if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -14809,7 +14813,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLE
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
+                                               }
+
+                                               if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -17314,7 +17320,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_CV == IS_CV || IS_CV == IS_VAR) {
+                                               }
+
+                                               if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -18594,7 +18602,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_H
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+                                               }
+
+                                               if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -19724,7 +19734,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HAN
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
+                                               }
+
+                                               if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -20854,7 +20866,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HAN
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
+                                               }
+
+                                               if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -22252,7 +22266,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HAND
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_CV == IS_CV || IS_CV == IS_VAR) {
+                                               }
+
+                                               if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -25394,7 +25410,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDL
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+                                               }
+
+                                               if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -27114,7 +27132,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
+                                               }
+
+                                               if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -28880,7 +28900,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
+                                               }
+
+                                               if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }
 
@@ -31150,7 +31172,9 @@ static int ZEND_FASTCALL  ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_
                                                                offset_len = norm_len;
                                                                free_offset = 1;
                                                        }
-                                               } else if (IS_CV == IS_CV || IS_CV == IS_VAR) {
+                                               }
+
+                                               if (IS_CV == IS_CV || IS_CV == IS_VAR) {
                                                        Z_ADDREF_P(offset);
                                                }