]> granicus.if.org Git - php/commitdiff
SplDoublyLinkedList Iterating a DLL by reference shouldn't be permitted
authorMarkBaker <mark@lange.demon.co.uk>
Sat, 7 Oct 2017 12:06:18 +0000 (13:06 +0100)
committerPeter Kokot <peterkokot@gmail.com>
Sun, 17 Feb 2019 18:35:13 +0000 (19:35 +0100)
ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt [new file with mode: 0644]

diff --git a/ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt b/ext/spl/tests/SPLDoublyLinkedList_iterate_by_reference.phpt
new file mode 100644 (file)
index 0000000..8c3aad3
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+SplDoublyLinkedList Iterating a DLL by reference shouldn't be permitted
+--CREDITS--
+Mark Baker mark@lange.demon.co.uk at the PHPNW2017 Conference for PHP Testfest 2017
+--FILE--
+<?php
+
+$dll = new SplDoublyLinkedList();
+
+$dll->push(2);
+$dll->push(3);
+
+try {
+    foreach($dll as $key => &$value) {
+        // We should never see this output, because the "by reference" exception should be thrown in the previous line
+        echo $value, PHP_EOL;
+        $value *= $value;
+        echo $value, PHP_EOL;
+    }
+} catch (Exception $e) {
+    echo $e->getMessage(), PHP_EOL;
+}
+
+?>
+--EXPECT--
+An iterator cannot be used with foreach by reference