diff options
author | Victor Stinner <vstinner@python.org> | 2023-09-06 15:34:31 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-06 15:34:31 (GMT) |
commit | 8ff11425783806f8cb78e99f667546b1f7f3428e (patch) | |
tree | 0c4d2006d833d74a59a809fd2447fc6a91ceabd7 /Lib/test/test_tomllib | |
parent | 2cd170db40ffba357848672ff3d2f8c1e0e74f2c (diff) | |
download | cpython-8ff11425783806f8cb78e99f667546b1f7f3428e.zip cpython-8ff11425783806f8cb78e99f667546b1f7f3428e.tar.gz cpython-8ff11425783806f8cb78e99f667546b1f7f3428e.tar.bz2 |
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().
Diffstat (limited to 'Lib/test/test_tomllib')
-rw-r--r-- | Lib/test/test_tomllib/test_misc.py | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/Lib/test/test_tomllib/test_misc.py b/Lib/test/test_tomllib/test_misc.py index a477a21..9e677a3 100644 --- a/Lib/test/test_tomllib/test_misc.py +++ b/Lib/test/test_tomllib/test_misc.py @@ -9,6 +9,7 @@ from pathlib import Path import sys import tempfile import unittest +from test import support from . import tomllib @@ -92,13 +93,23 @@ class TestMiscellaneous(unittest.TestCase): 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) |