Skip to content

Commit

Permalink
gh-93678: Address stack exhaustion on WASI (GH-95296)
Browse files Browse the repository at this point in the history
  • Loading branch information
tiran committed Jul 26, 2022
1 parent 9af7f87 commit 51c56f8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
2 changes: 2 additions & 0 deletions Lib/test/test_compile.py
Expand Up @@ -108,6 +108,7 @@ def __getitem__(self, key):
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)
Expand Down Expand Up @@ -542,6 +543,7 @@ def test_yet_more_evil_still_undecodable(self):
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)
Expand Down
11 changes: 7 additions & 4 deletions Lib/test/test_dynamic.py
@@ -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
Expand Down Expand Up @@ -139,12 +140,14 @@ class MyGlobals(dict):
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()

0 comments on commit 51c56f8

Please sign in to comment.