Commit:    5ebbdecfeaaea1bc78450a2bb6d5ee280bf18dbd
Author:    Xinchen Hui <larue...@php.net>         Sun, 26 Aug 2012 13:05:33 
+0800
Parents:   c6a5d192c8f23ce54c253decb8be727bddc4f3bf
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=5ebbdecfeaaea1bc78450a2bb6d5ee280bf18dbd

Log:
Fixed bug #62930, and more tests

Bugs:
https://bugs.php.net/62930

Changed paths:
  D  Zend/tests/foreach_list.phpt
  A  Zend/tests/foreach_list_001.phpt
  A  Zend/tests/foreach_list_002.phpt
  A  Zend/tests/foreach_list_003.phpt
  A  Zend/tests/foreach_list_004.phpt
  M  Zend/zend_compile.c


Diff:
diff --git a/Zend/tests/foreach_list.phpt b/Zend/tests/foreach_list.phpt
deleted file mode 100644
index a318f1a..0000000
--- a/Zend/tests/foreach_list.phpt
+++ /dev/null
@@ -1,43 +0,0 @@
---TEST--
-foreach with list syntax
---FILE--
-<?php
-
-foreach(array(array(1,2), array(3,4)) as list($a, $b)) {
-    var_dump($a . $b);
-}
-
-$array = array(
-    array('a', 'b'),
-    array('c', 'd'),
-);
-
-foreach ($array as list($a, $b)) {
-    var_dump($a . $b);
-}
-
-
-$multi = array(
-    array(array(1,2), array(3,4)),
-    array(array(5,6), array(7,8)),
-);
-
-foreach ($multi as list(list($a, $b), list($c, $d))) {
-    var_dump($a . $b . $c . $d);
-}
-
-foreach ($multi as $key => list(list($a, $b), list($c, $d))) {
-    var_dump($key . $a . $b . $c . $d);
-}
-
-
-?>
---EXPECT--
-string(2) "12"
-string(2) "34"
-string(2) "ab"
-string(2) "cd"
-string(4) "1234"
-string(4) "5678"
-string(5) "01234"
-string(5) "15678"
diff --git a/Zend/tests/foreach_list_001.phpt b/Zend/tests/foreach_list_001.phpt
new file mode 100644
index 0000000..a318f1a
--- /dev/null
+++ b/Zend/tests/foreach_list_001.phpt
@@ -0,0 +1,43 @@
+--TEST--
+foreach with list syntax
+--FILE--
+<?php
+
+foreach(array(array(1,2), array(3,4)) as list($a, $b)) {
+    var_dump($a . $b);
+}
+
+$array = array(
+    array('a', 'b'),
+    array('c', 'd'),
+);
+
+foreach ($array as list($a, $b)) {
+    var_dump($a . $b);
+}
+
+
+$multi = array(
+    array(array(1,2), array(3,4)),
+    array(array(5,6), array(7,8)),
+);
+
+foreach ($multi as list(list($a, $b), list($c, $d))) {
+    var_dump($a . $b . $c . $d);
+}
+
+foreach ($multi as $key => list(list($a, $b), list($c, $d))) {
+    var_dump($key . $a . $b . $c . $d);
+}
+
+
+?>
+--EXPECT--
+string(2) "12"
+string(2) "34"
+string(2) "ab"
+string(2) "cd"
+string(4) "1234"
+string(4) "5678"
+string(5) "01234"
+string(5) "15678"
diff --git a/Zend/tests/foreach_list_002.phpt b/Zend/tests/foreach_list_002.phpt
new file mode 100644
index 0000000..251870b
--- /dev/null
+++ b/Zend/tests/foreach_list_002.phpt
@@ -0,0 +1,26 @@
+--TEST--
+foreach with freak lists
+--FILE--
+<?php
+
+foreach (array(array(1,2), array(3,4)) as list($a, )) {
+    var_dump($a);
+}
+
+$array = [['a', 'b'], 'c', 'd'];
+
+foreach($array as list(list(), $a)) {
+   var_dump($a); 
+}
+
+?>
+--EXPECTF--
+int(1)
+int(3)
+string(1) "b"
+
+Notice: Uninitialized string offset: 1 in %sforeach_list_002.php on line %d
+string(0) ""
+
+Notice: Uninitialized string offset: 1 in %sforeach_list_002.php on line %d
+string(0) ""
diff --git a/Zend/tests/foreach_list_003.phpt b/Zend/tests/foreach_list_003.phpt
new file mode 100644
index 0000000..8674ecd
--- /dev/null
+++ b/Zend/tests/foreach_list_003.phpt
@@ -0,0 +1,13 @@
+--TEST--
+foreach with list key
+--FILE--
+<?php
+
+$array = [['a', 'b'], 'c', 'd'];
+
+foreach($array as list($key) => list(list(), $a)) {
+}
+
+?>
+--EXPECTF--
+Fatal error: Cannot use list as key element in %sforeach_list_003.php on line 
%d
diff --git a/Zend/tests/foreach_list_004.phpt b/Zend/tests/foreach_list_004.phpt
new file mode 100644
index 0000000..fd48e8a
--- /dev/null
+++ b/Zend/tests/foreach_list_004.phpt
@@ -0,0 +1,13 @@
+--TEST--
+foreach with empty list
+--FILE--
+<?php
+
+$array = [['a', 'b'], 'c', 'd'];
+
+foreach($array as $key => list()) {
+}
+
+?>
+--EXPECTF--
+Fatal error: Cannot use empty list in %sforeach_list_004.php on line %d
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index d825792..704db10 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -6288,7 +6288,7 @@ void zend_do_foreach_cont(znode *foreach_token, const 
znode *open_brackets_token
                        zend_error(E_COMPILE_ERROR, "Key element cannot be a 
reference");
                }
                if (key->EA & ZEND_PARSED_LIST_EXPR) {
-                       zend_error(E_COMPILE_ERROR, "Cannot use list as Key 
element");
+                       zend_error(E_COMPILE_ERROR, "Cannot use list as key 
element");
                }
        }
 
@@ -6326,6 +6326,9 @@ void zend_do_foreach_cont(znode *foreach_token, const 
znode *open_brackets_token
        GET_NODE(&value_node, opline->result);
 
        if (value->EA & ZEND_PARSED_LIST_EXPR) {
+               if (!CG(list_llist).head) {
+                       zend_error(E_COMPILE_ERROR, "Cannot use empty list");
+               }
                zend_do_list_end(&dummy, &value_node TSRMLS_CC);
                zend_do_free(&dummy TSRMLS_CC);
        } else {


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to