Skip to content

Commit 8bcb3ea

Browse files
authored
pythongh-144851: Fix __lazy_import__ crash with user-defined filters (python#144852)
1 parent 3b276f3 commit 8bcb3ea

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

Lib/test/test_lazy_import/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,11 @@ def test_dunder_lazy_import(self):
391391
import test.test_lazy_import.data.dunder_lazy_import
392392
self.assertNotIn("test.test_lazy_import.data.basic2", sys.modules)
393393

394+
def test_dunder_lazy_import_with_custom_filter(self):
395+
sys.set_lazy_imports_filter(lambda importer, imported, fromlist: False)
396+
import test.test_lazy_import.data.dunder_lazy_import
397+
self.assertIn("test.test_lazy_import.data.basic2", sys.modules)
398+
394399
def test_dunder_lazy_import_used(self):
395400
"""Using __lazy_import__ result should trigger module load."""
396401
import test.test_lazy_import.data.dunder_lazy_import_used

Python/import.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4512,6 +4512,10 @@ _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate,
45124512
assert(!PyErr_Occurred());
45134513
modname = Py_NewRef(Py_None);
45144514
}
4515+
if (fromlist == NULL) {
4516+
assert(!PyErr_Occurred());
4517+
fromlist = Py_NewRef(Py_None);
4518+
}
45154519
PyObject *args[] = {modname, name, fromlist};
45164520
PyObject *res = PyObject_Vectorcall(filter, args, 3, NULL);
45174521

0 commit comments

Comments
 (0)