diff --git a/Lib/test/test_import/test_lazy_imports.py b/Lib/test/test_import/test_lazy_imports.py index dc185c070acc62..39d37f68e0b47b 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 493a6e0413d8eb..301125051f3b0e 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; }