From 2be2dd5fc219a5c252d72f351c85db14314bfca5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 21 Feb 2026 22:06:59 +0100 Subject: [PATCH] gh-145076: Check globals type in __lazy_import__() (#145086) --- Lib/test/test_import/test_lazy_imports.py | 2 ++ Python/bltinmodule.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/Lib/test/test_import/test_lazy_imports.py b/Lib/test/test_import/test_lazy_imports.py index dc185c070ac..39d37f68e0b 100644 --- a/Lib/test/test_import/test_lazy_imports.py +++ b/Lib/test/test_import/test_lazy_imports.py @@ -401,6 +401,8 @@ def test_dunder_lazy_import_invalid_arguments(self): 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 493a6e0413d..301125051f3 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; }