[Python-checkins] bpo-11105: reduce the recursion limit for tests (GH-26550)

isidentical webhook-mailer at python.org
Tue Jun 8 12:55:18 EDT 2021


https://github.com/python/cpython/commit/e58d762c1fb4ad5e021d016c80c2bc4513632d2f
commit: e58d762c1fb4ad5e021d016c80c2bc4513632d2f
branch: main
author: Batuhan Taskaya <batuhan at python.org>
committer: isidentical <isidentical at gmail.com>
date: 2021-06-08T19:55:10+03:00
summary:

bpo-11105: reduce the recursion limit for tests (GH-26550)

files:
M Lib/test/support/__init__.py
M Lib/test/test_ast.py

diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 34a9459b518fab..d17331e6e89b7d 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -1999,3 +1999,12 @@ def check_disallow_instantiation(testcase, tp, *args, **kwds):
         qualname = f"{name}"
     msg = f"cannot create '{re.escape(qualname)}' instances"
     testcase.assertRaisesRegex(TypeError, msg, tp, *args, **kwds)
+
+ at contextlib.contextmanager
+def infinite_recursion(max_depth=75):
+    original_depth = sys.getrecursionlimit()
+    try:
+        sys.setrecursionlimit(max_depth)
+        yield
+    finally:
+        sys.setrecursionlimit(original_depth)
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index 6a6f06c835037a..5f1ee75c8bddcb 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -1102,7 +1102,8 @@ def test_recursion_direct(self):
         e = ast.UnaryOp(op=ast.Not(), lineno=0, col_offset=0)
         e.operand = e
         with self.assertRaises(RecursionError):
-            compile(ast.Expression(e), "<test>", "eval")
+            with support.infinite_recursion():
+                compile(ast.Expression(e), "<test>", "eval")
 
     def test_recursion_indirect(self):
         e = ast.UnaryOp(op=ast.Not(), lineno=0, col_offset=0)
@@ -1110,7 +1111,8 @@ def test_recursion_indirect(self):
         e.operand = f
         f.operand = e
         with self.assertRaises(RecursionError):
-            compile(ast.Expression(e), "<test>", "eval")
+            with support.infinite_recursion():
+                compile(ast.Expression(e), "<test>", "eval")
 
 
 class ASTValidatorTests(unittest.TestCase):



More information about the Python-checkins mailing list