summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-06-03 22:41:06 +0100
committerDamien George <damien.p.george@gmail.com>2015-06-03 22:41:06 +0100
commit80f638fe19f6d40c53792eebda2dfdecc82ad75e (patch)
treef7d219a3c0e57044063a2623d136234b3f216f0c
parent953c23b1bcc732ccb3a6e4798add9b1f2fc0f444 (diff)
downloadmicropython-80f638fe19f6d40c53792eebda2dfdecc82ad75e.tar.gz
micropython-80f638fe19f6d40c53792eebda2dfdecc82ad75e.zip
tests: Add test for recursive iternext stack overflow.
-rw-r--r--tests/misc/recursive_iternext.py33
-rw-r--r--tests/misc/recursive_iternext.py.exp4
2 files changed, 37 insertions, 0 deletions
diff --git a/tests/misc/recursive_iternext.py b/tests/misc/recursive_iternext.py
new file mode 100644
index 0000000000..ac3a17e93b
--- /dev/null
+++ b/tests/misc/recursive_iternext.py
@@ -0,0 +1,33 @@
+# This tests that recursion with iternext doesn't lead to segfault.
+
+try:
+ x = (1, 2)
+ for i in range(1000):
+ x = enumerate(x)
+ tuple(x)
+except RuntimeError:
+ print("RuntimeError")
+
+try:
+ x = (1, 2)
+ for i in range(1000):
+ x = filter(None, x)
+ tuple(x)
+except RuntimeError:
+ print("RuntimeError")
+
+try:
+ x = (1, 2)
+ for i in range(1000):
+ x = map(max, x, ())
+ tuple(x)
+except RuntimeError:
+ print("RuntimeError")
+
+try:
+ x = (1, 2)
+ for i in range(1000):
+ x = zip(x)
+ tuple(x)
+except RuntimeError:
+ print("RuntimeError")
diff --git a/tests/misc/recursive_iternext.py.exp b/tests/misc/recursive_iternext.py.exp
new file mode 100644
index 0000000000..80d1488a37
--- /dev/null
+++ b/tests/misc/recursive_iternext.py.exp
@@ -0,0 +1,4 @@
+RuntimeError
+RuntimeError
+RuntimeError
+RuntimeError