summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_itertools.py
diff options
context:
space:
mode:
authorT. Wouters <thomas@python.org>2017-03-30 19:49:22 (GMT)
committerGitHub <noreply@github.com>2017-03-30 19:49:22 (GMT)
commitd694a06206fc09b76b4507aacde5e69a248f434f (patch)
tree2a9f3f2ff87b55f01160205b6f8f3239146c35dc /Lib/test/test_itertools.py
parent079f21f873b99f9564a41c5b7f3e0d7035847ae5 (diff)
downloadcpython-d694a06206fc09b76b4507aacde5e69a248f434f.zip
cpython-d694a06206fc09b76b4507aacde5e69a248f434f.tar.gz
cpython-d694a06206fc09b76b4507aacde5e69a248f434f.tar.bz2
bpo-29942: Fix the use of recursion in itertools.chain.from_iterable. (#913)
Fix the use of recursion in itertools.chain.from_iterable. Using recursion is unnecessary, and can easily cause stack overflows, especially when building in low optimization modes or with Py_DEBUG enabled. (cherry picked from commit 5466d4af5fe76ec0a5fbc8a05675287d9e8e9d14)
Diffstat (limited to 'Lib/test/test_itertools.py')
-rw-r--r--Lib/test/test_itertools.py8
1 files changed, 8 insertions, 0 deletions
diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index 5672104..7b2362d 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -1465,6 +1465,14 @@ class RegressionTests(unittest.TestCase):
self.assertRaises(AssertionError, list, cycle(gen1()))
self.assertEqual(hist, [0,1])
+ def test_long_chain_of_empty_iterables(self):
+ # Make sure itertools.chain doesn't run into recursion limits when
+ # dealing with long chains of empty iterables. Even with a high
+ # number this would probably only fail in Py_DEBUG mode.
+ it = chain.from_iterable(() for unused in xrange(10000000))
+ with self.assertRaises(StopIteration):
+ next(it)
+
class SubclassWithKwargsTest(unittest.TestCase):
def test_keywords_in_subclass(self):
# count is not subclassable...