diff options
author | Radislav Chugunov <52372310+chgnrdv@users.noreply.github.com> | 2023-10-23 23:06:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-23 23:06:59 (GMT) |
commit | 47d3e2ed930a9f3d228aed4f62133737dae74cf7 (patch) | |
tree | 3d2097e5361f2185add54f89d9a96ab14978861b /Lib/test/test_exceptions.py | |
parent | 96cbd1e1db3447a33e5cc5cc2886ce79b61cc6eb (diff) | |
download | cpython-47d3e2ed930a9f3d228aed4f62133737dae74cf7.zip cpython-47d3e2ed930a9f3d228aed4f62133737dae74cf7.tar.gz cpython-47d3e2ed930a9f3d228aed4f62133737dae74cf7.tar.bz2 |
gh-109894: Fix initialization of static `MemoryError` in subinterpreter (gh-110911)
Fixes #109894
* set `interp.static_objects.last_resort_memory_error.args` to empty tuple to avoid crash on `PyErr_Display()` call
* allow `_PyExc_InitGlobalObjects()` to be called on subinterpreter init
---------
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Diffstat (limited to 'Lib/test/test_exceptions.py')
-rw-r--r-- | Lib/test/test_exceptions.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 4031c5c..7f1d5ee 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1791,6 +1791,20 @@ class ExceptionTests(unittest.TestCase): gc_collect() + def test_memory_error_in_subinterp(self): + # gh-109894: subinterpreters shouldn't count on last resort memory error + # when MemoryError is raised through PyErr_NoMemory() call, + # and should preallocate memory errors as does the main interpreter. + # interp.static_objects.last_resort_memory_error.args + # should be initialized to empty tuple to avoid crash on attempt to print it. + code = f"""if 1: + import _testcapi + _testcapi.run_in_subinterp(\"[0]*{sys.maxsize}\") + exit(0) + """ + rc, _, err = script_helper.assert_python_ok("-c", code) + self.assertIn(b'MemoryError', err) + class NameErrorTests(unittest.TestCase): def test_name_error_has_name(self): |