mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-108851: Fix tomllib recursion tests (#108853)
* Add get_recursion_available() and get_recursion_depth() functions
to the test.support module.
* Change infinite_recursion() default max_depth from 75 to 100.
* Fix test_tomllib recursion tests for WASI buildbots: reduce the
recursion limit and compute the maximum nested array/dict depending
on the current available recursion limit.
* test.pythoninfo logs sys.getrecursionlimit().
* Enhance test_sys tests on sys.getrecursionlimit()
and sys.setrecursionlimit().
Backport notes:
* Set support.infinite_recursion() minimum to 4 frames.
* test_support.test_get_recursion_depth() uses limit-2, apparently
f-string counts for 2 frames in Python 3.11.
* test_sys.test_setrecursionlimit_to_depth() tests depth+2 instead of
depth+1.
(cherry picked from commit 8ff1142578)
This commit is contained in:
parent
d61b8f9b8b
commit
95eb9849dd
7 changed files with 183 additions and 41 deletions
|
|
@ -9,6 +9,7 @@
|
|||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from test import support
|
||||
|
||||
from . import tomllib
|
||||
|
||||
|
|
@ -92,13 +93,23 @@ def test_deepcopy(self):
|
|||
self.assertEqual(obj_copy, expected_obj)
|
||||
|
||||
def test_inline_array_recursion_limit(self):
|
||||
# 465 with default recursion limit
|
||||
nest_count = int(sys.getrecursionlimit() * 0.465)
|
||||
recursive_array_toml = "arr = " + nest_count * "[" + nest_count * "]"
|
||||
tomllib.loads(recursive_array_toml)
|
||||
with support.infinite_recursion(max_depth=100):
|
||||
available = support.get_recursion_available()
|
||||
nest_count = (available // 2) - 2
|
||||
# Add details if the test fails
|
||||
with self.subTest(limit=sys.getrecursionlimit(),
|
||||
available=available,
|
||||
nest_count=nest_count):
|
||||
recursive_array_toml = "arr = " + nest_count * "[" + nest_count * "]"
|
||||
tomllib.loads(recursive_array_toml)
|
||||
|
||||
def test_inline_table_recursion_limit(self):
|
||||
# 310 with default recursion limit
|
||||
nest_count = int(sys.getrecursionlimit() * 0.31)
|
||||
recursive_table_toml = nest_count * "key = {" + nest_count * "}"
|
||||
tomllib.loads(recursive_table_toml)
|
||||
with support.infinite_recursion(max_depth=100):
|
||||
available = support.get_recursion_available()
|
||||
nest_count = (available // 3) - 1
|
||||
# Add details if the test fails
|
||||
with self.subTest(limit=sys.getrecursionlimit(),
|
||||
available=available,
|
||||
nest_count=nest_count):
|
||||
recursive_table_toml = nest_count * "key = {" + nest_count * "}"
|
||||
tomllib.loads(recursive_table_toml)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue