diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2023-09-08 13:18:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-08 13:18:02 (GMT) |
commit | 55d7e8fef135a0ce69b0ed19c8b06a4fb04934d1 (patch) | |
tree | be27610b50104a74a86ffa5944807c5998f89060 /Lib/test/test_tomllib/test_misc.py | |
parent | 038b0a9cb0e5fee6f8e7cd2f503b5f02971fc660 (diff) | |
download | cpython-55d7e8fef135a0ce69b0ed19c8b06a4fb04934d1.zip cpython-55d7e8fef135a0ce69b0ed19c8b06a4fb04934d1.tar.gz cpython-55d7e8fef135a0ce69b0ed19c8b06a4fb04934d1.tar.bz2 |
[3.12] gh-108851: Fix tomllib recursion tests (GH-108853) (#109012)
gh-108851: Fix tomllib recursion tests (GH-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().
(cherry picked from commit 8ff11425783806f8cb78e99f667546b1f7f3428e)
Co-authored-by: Victor Stinner <vstinner@python.org>
Diffstat (limited to 'Lib/test/test_tomllib/test_misc.py')
-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) |