bpo-42848: remove recursion from TracebackException (GH-24158)
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index abb5762..07555a0 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -1148,6 +1148,31 @@ def test_context(self):
self.assertEqual(exc_info[0], exc.exc_type)
self.assertEqual(str(exc_info[1]), str(exc))
+ def test_long_context_chain(self):
+ def f():
+ try:
+ 1/0
+ except:
+ f()
+
+ try:
+ f()
+ except RecursionError:
+ exc_info = sys.exc_info()
+ else:
+ self.fail("Exception not raised")
+
+ te = traceback.TracebackException(*exc_info)
+ res = list(te.format())
+
+ # many ZeroDiv errors followed by the RecursionError
+ self.assertGreater(len(res), sys.getrecursionlimit())
+ self.assertGreater(
+ len([l for l in res if 'ZeroDivisionError:' in l]),
+ sys.getrecursionlimit() * 0.5)
+ self.assertIn(
+ "RecursionError: maximum recursion depth exceeded", res[-1])
+
def test_no_refs_to_exception_and_traceback_objects(self):
try:
1/0