]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93678: Address stack exhaustion on WASI (GH-95296)
authorChristian Heimes <christian@python.org>
Tue, 26 Jul 2022 20:14:35 +0000 (22:14 +0200)
committerGitHub <noreply@github.com>
Tue, 26 Jul 2022 20:14:35 +0000 (22:14 +0200)
Lib/test/test_compile.py
Lib/test/test_dynamic.py

index 11940bec492d89e3f98caf49eb0f56dba5df0471..e6194460b787d3616084c72540cd2790f42a5c10 100644 (file)
@@ -108,6 +108,7 @@ class TestSpecifics(unittest.TestCase):
         exec('z = a', g, d)
         self.assertEqual(d['z'], 12)
 
+    @unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI")
     def test_extended_arg(self):
         # default: 1000 * 2.5 = 2500 repetitions
         repeat = int(sys.getrecursionlimit() * 2.5)
@@ -542,6 +543,7 @@ if 1:
         self.assertIn(b"Non-UTF-8", res.err)
 
     @support.cpython_only
+    @unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI")
     def test_compiler_recursion_limit(self):
         # Expected limit is sys.getrecursionlimit() * the scaling factor
         # in symtable.c (currently 3)
index 3e0fcf4d158f8a516fa9a2c43b031c28130c3899..e896fc703c9a8b44ababea802880e1e1e7252e2b 100644 (file)
@@ -1,6 +1,7 @@
 # Test the most dynamic corner cases of Python's runtime semantics.
 
 import builtins
+import sys
 import unittest
 
 from test.support import swap_item, swap_attr
@@ -139,12 +140,14 @@ class RebindBuiltinsTests(unittest.TestCase):
             def __missing__(self, key):
                 return int(key.removeprefix("_number_"))
 
-        code = "lambda: " + "+".join(f"_number_{i}" for i in range(1000))
-        sum_1000 = eval(code, MyGlobals())
-        expected = sum(range(1000))
+        # 1,000 on most systems
+        limit = sys.getrecursionlimit()
+        code = "lambda: " + "+".join(f"_number_{i}" for i in range(limit))
+        sum_func = eval(code, MyGlobals())
+        expected = sum(range(limit))
         # Warm up the the function for quickening (PEP 659)
         for _ in range(30):
-            self.assertEqual(sum_1000(), expected)
+            self.assertEqual(sum_func(), expected)
 
 if __name__ == "__main__":
     unittest.main()