summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_tomllib
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-09-06 15:34:31 (GMT)
committerGitHub <noreply@github.com>2023-09-06 15:34:31 (GMT)
commit8ff11425783806f8cb78e99f667546b1f7f3428e (patch)
tree0c4d2006d833d74a59a809fd2447fc6a91ceabd7 /Lib/test/test_tomllib
parent2cd170db40ffba357848672ff3d2f8c1e0e74f2c (diff)
downloadcpython-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.py27
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)