@@ -3766,9 +3766,13 @@ _PyImport_LoadLazyImportTstate(PyThreadState *tstate, PyObject *lazy_import)
37663766
37673767 PyObject * globals = PyEval_GetGlobals ();
37683768
3769+ PyObject * import_func ;
3770+ if (PyMapping_GetOptionalItem (lz -> lz_builtins , & _Py_ID (__import__ ), & import_func ) < 0 ) {
3771+ return NULL ;
3772+ }
37693773 if (full ) {
37703774 obj = _PyEval_ImportNameWithImport (tstate ,
3771- lz -> lz_import_func ,
3775+ import_func ,
37723776 globals ,
37733777 globals ,
37743778 lz -> lz_from ,
@@ -3777,18 +3781,19 @@ _PyImport_LoadLazyImportTstate(PyThreadState *tstate, PyObject *lazy_import)
37773781 } else {
37783782 PyObject * name = PyUnicode_Substring (lz -> lz_from , 0 , dot );
37793783 if (name == NULL ) {
3784+ Py_DECREF (import_func );
37803785 goto error ;
37813786 }
37823787 obj = _PyEval_ImportNameWithImport (tstate ,
3783- lz -> lz_import_func ,
3788+ import_func ,
37843789 globals ,
37853790 globals ,
37863791 name ,
37873792 fromlist ,
37883793 _PyLong_GetZero ());
37893794 Py_DECREF (name );
37903795 }
3791-
3796+ Py_DECREF ( import_func );
37923797 if (obj == NULL ) {
37933798 goto error ;
37943799 }
@@ -4113,7 +4118,7 @@ get_mod_dict(PyObject *module)
41134118}
41144119
41154120static int
4116- register_lazy_on_parent (PyThreadState * tstate , PyObject * name , PyObject * import_func )
4121+ register_lazy_on_parent (PyThreadState * tstate , PyObject * name , PyObject * builtins )
41174122{
41184123 int ret = -1 ;
41194124 PyObject * parent = NULL ;
@@ -4183,7 +4188,7 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, PyObject *import_
41834188 goto done ;
41844189 }
41854190 if (PyDict_CheckExact (parent_dict ) && !PyDict_Contains (parent_dict , child )) {
4186- PyObject * lazy_module_attr = _PyLazyImport_New (import_func , parent , child );
4191+ PyObject * lazy_module_attr = _PyLazyImport_New (builtins , parent , child );
41874192 if (lazy_module_attr == NULL ) {
41884193 goto done ;
41894194 }
@@ -4211,7 +4216,7 @@ register_lazy_on_parent(PyThreadState *tstate, PyObject *name, PyObject *import_
42114216
42124217PyObject *
42134218_PyImport_LazyImportModuleLevelObject (PyThreadState * tstate ,
4214- PyObject * name , PyObject * import_func ,
4219+ PyObject * name , PyObject * builtins ,
42154220 PyObject * globals , PyObject * locals ,
42164221 PyObject * fromlist , int level )
42174222{
@@ -4253,8 +4258,8 @@ _PyImport_LazyImportModuleLevelObject(PyThreadState *tstate,
42534258 }
42544259 }
42554260
4256- PyObject * res = _PyLazyImport_New (import_func , abs_name , fromlist );
4257- if (register_lazy_on_parent (tstate , abs_name , import_func ) < 0 ) {
4261+ PyObject * res = _PyLazyImport_New (builtins , abs_name , fromlist );
4262+ if (register_lazy_on_parent (tstate , abs_name , builtins ) < 0 ) {
42584263 Py_DECREF (res );
42594264 res = NULL ;
42604265 }
@@ -5302,15 +5307,7 @@ _imp__set_lazy_attributes_impl(PyObject *module, PyObject *child_module,
53025307 continue ;
53035308 }
53045309 PyObject * builtins = _PyEval_GetBuiltins (tstate );
5305- PyObject * import_func ;
5306- if (PyMapping_GetOptionalItem (builtins , & _Py_ID (__import__ ), & import_func ) < 0 ) {
5307- goto error ;
5308- } else if (import_func == NULL ) {
5309- _PyErr_SetString (tstate , PyExc_ImportError , "__import__ not found" );
5310- goto error ;
5311- }
5312-
5313- PyObject * lazy_module_attr = _PyLazyImport_New (import_func , name , attr_name );
5310+ PyObject * lazy_module_attr = _PyLazyImport_New (builtins , name , attr_name );
53145311 if (lazy_module_attr == NULL ) {
53155312 goto error ;
53165313 }
0 commit comments