From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 7 Jul 2026 12:36:50 +0000 (+0200) Subject: [3.14] gh-153210: Fix `array` module import crash under a memory pressure (GH-153238... X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=25a53d9ab4e9139a1f84e93aacb9834d65234a65;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-153210: Fix `array` module import crash under a memory pressure (GH-153238) (#153250) gh-153210: Fix `array` module import crash under a memory pressure (GH-153238) (cherry picked from commit 12ed8b16feb3502cea427ff846e9d0b3d7fef721) Co-authored-by: sobolevn --- diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 98def945b7d1..788095e5dfa0 100755 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -5,7 +5,7 @@ import collections.abc import unittest from test import support -from test.support import import_helper +from test.support import import_helper, script_helper from test.support import os_helper from test.support import _2G from test.support import subTests @@ -45,6 +45,23 @@ class MiscTest(unittest.TestCase): self.assertRaises(TypeError, array.array, 'xx') self.assertRaises(ValueError, array.array, 'x') + @support.cpython_only + def test_does_not_crash_on_broken_imports(self): + # gh-153210 + code = """if 1: + import collections.abc + + del collections.abc.MutableSequence + + try: + import array # it used to crash before + except AttributeError: + pass + else: + raise AssertionError('AttributeError was not raised') + """ + script_helper.assert_python_ok('-c', code) + @support.cpython_only def test_disallow_instantiation(self): my_array = array.array("I") diff --git a/Misc/NEWS.d/next/Library/2026-07-07-02-26-43.gh-issue-153210.LUXIcm.rst b/Misc/NEWS.d/next/Library/2026-07-07-02-26-43.gh-issue-153210.LUXIcm.rst new file mode 100644 index 000000000000..d5d4b7c1b8c0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-07-07-02-26-43.gh-issue-153210.LUXIcm.rst @@ -0,0 +1 @@ +Fix crash on :mod:`array` import under a memory pressure. diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 6337355f787a..c4863b143dfd 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -3295,22 +3295,15 @@ array_modexec(PyObject *m) CREATE_TYPE(m, state->ArrayIterType, &arrayiter_spec); Py_SET_TYPE(state->ArrayIterType, &PyType_Type); - if (PyModule_AddObjectRef(m, "ArrayType", - (PyObject *)state->ArrayType) < 0) { - return -1; - } - PyObject *mutablesequence = PyImport_ImportModuleAttrString( "collections.abc", "MutableSequence"); if (!mutablesequence) { - Py_DECREF((PyObject *)state->ArrayType); return -1; } PyObject *res = PyObject_CallMethod(mutablesequence, "register", "O", (PyObject *)state->ArrayType); Py_DECREF(mutablesequence); if (!res) { - Py_DECREF((PyObject *)state->ArrayType); return -1; } Py_DECREF(res);