mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
GH-91079: Implement C stack limits using addresses, not counters. (GH-130007)
* Implement C recursion protection with limit pointers * Remove calls to PyOS_CheckStack * Add stack protection to parser * Make tests more robust to low stacks * Improve error messages for stack overflow
This commit is contained in:
parent
c637bce20a
commit
2498c22fa0
47 changed files with 1217 additions and 1463 deletions
|
@ -628,13 +628,23 @@ x = (
|
|||
r"does not match opening parenthesis '\('",
|
||||
["f'{a(4}'",
|
||||
])
|
||||
self.assertRaises(SyntaxError, eval, "f'{" + "("*500 + "}'")
|
||||
self.assertRaises(SyntaxError, eval, "f'{" + "("*20 + "}'")
|
||||
|
||||
@unittest.skipIf(support.is_wasi, "exhausts limited stack on WASI")
|
||||
def test_fstring_nested_too_deeply(self):
|
||||
self.assertAllRaise(SyntaxError,
|
||||
"f-string: expressions nested too deeply",
|
||||
['f"{1+2:{1+2:{1+1:{1}}}}"'])
|
||||
def raises_syntax_or_memory_error(txt):
|
||||
try:
|
||||
eval(txt)
|
||||
except SyntaxError:
|
||||
pass
|
||||
except MemoryError:
|
||||
pass
|
||||
except Exception as ex:
|
||||
self.fail(f"Should raise SyntaxError or MemoryError, not {type(ex)}")
|
||||
else:
|
||||
self.fail("No exception raised")
|
||||
|
||||
raises_syntax_or_memory_error('f"{1+2:{1+2:{1+1:{1}}}}"')
|
||||
|
||||
def create_nested_fstring(n):
|
||||
if n == 0:
|
||||
|
@ -642,9 +652,10 @@ x = (
|
|||
prev = create_nested_fstring(n-1)
|
||||
return f'f"{{{prev}}}"'
|
||||
|
||||
self.assertAllRaise(SyntaxError,
|
||||
"too many nested f-strings",
|
||||
[create_nested_fstring(160)])
|
||||
raises_syntax_or_memory_error(create_nested_fstring(160))
|
||||
raises_syntax_or_memory_error("f'{" + "("*100 + "}'")
|
||||
raises_syntax_or_memory_error("f'{" + "("*1000 + "}'")
|
||||
raises_syntax_or_memory_error("f'{" + "("*10_000 + "}'")
|
||||
|
||||
def test_syntax_error_in_nested_fstring(self):
|
||||
# See gh-104016 for more information on this crash
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue