From: Victor Stinner Date: Sat, 21 Feb 2026 21:06:59 +0000 (+0100) Subject: gh-145076: Check globals type in __lazy_import__() (#145086) X-Git-Tag: v3.15.0a7~184 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2be2dd5fc219a5c252d72f351c85db14314bfca5;p=thirdparty%2FPython%2Fcpython.git gh-145076: Check globals type in __lazy_import__() (#145086) --- diff --git a/Lib/test/test_import/test_lazy_imports.py b/Lib/test/test_import/test_lazy_imports.py index dc185c070acc..39d37f68e0b4 100644 --- a/Lib/test/test_import/test_lazy_imports.py +++ b/Lib/test/test_import/test_lazy_imports.py @@ -401,6 +401,8 @@ class DunderLazyImportTests(unittest.TestCase): with self.assertRaises(ValueError): __lazy_import__("sys", level=-1) + with self.assertRaises(TypeError): + __lazy_import__("sys", globals=1) def test_dunder_lazy_import_builtins(self): """__lazy_import__ should use module's __builtins__ for __import__.""" diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 493a6e0413d8..301125051f3b 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -318,6 +318,12 @@ builtin___lazy_import___impl(PyObject *module, PyObject *name, locals = globals; } + if (!PyDict_Check(globals)) { + PyErr_Format(PyExc_TypeError, + "expect dict for globals, got %T", globals); + return NULL; + } + if (PyDict_GetItemRef(globals, &_Py_ID(__builtins__), &builtins) < 0) { return NULL; }