]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-144851: Fix `__lazy_import__` crash with user-defined filters (#144852)
authorBartosz Sławecki <bartosz@ilikepython.com>
Mon, 2 Mar 2026 11:01:32 +0000 (12:01 +0100)
committerGitHub <noreply@github.com>
Mon, 2 Mar 2026 11:01:32 +0000 (12:01 +0100)
Lib/test/test_lazy_import/__init__.py
Python/import.c

index df19af05246dcddb40a4f6b987c3c46907f3a854..5d30ec2299789b321b11854bd3d6ec02583686ce 100644 (file)
@@ -391,6 +391,11 @@ class DunderLazyImportTests(unittest.TestCase):
         import test.test_lazy_import.data.dunder_lazy_import
         self.assertNotIn("test.test_lazy_import.data.basic2", sys.modules)
 
+    def test_dunder_lazy_import_with_custom_filter(self):
+        sys.set_lazy_imports_filter(lambda importer, imported, fromlist: False)
+        import test.test_lazy_import.data.dunder_lazy_import
+        self.assertIn("test.test_lazy_import.data.basic2", sys.modules)
+
     def test_dunder_lazy_import_used(self):
         """Using __lazy_import__ result should trigger module load."""
         import test.test_lazy_import.data.dunder_lazy_import_used
index 4c234a4a70437cfed28580de372498b40d4380b4..dfc4d5707bfdba1fdc4b111a5eba837e0dfdc425 100644 (file)
@@ -4512,6 +4512,10 @@ _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate,
             assert(!PyErr_Occurred());
             modname = Py_NewRef(Py_None);
         }
+        if (fromlist == NULL) {
+            assert(!PyErr_Occurred());
+            fromlist = Py_NewRef(Py_None);
+        }
         PyObject *args[] = {modname, name, fromlist};
         PyObject *res = PyObject_Vectorcall(filter, args, 3, NULL);