@@ -5024,7 +5024,7 @@ import_from(PyObject *v, PyObject *name)
5024
5024
{
5025
5025
PyObject * x ;
5026
5026
_Py_IDENTIFIER (__name__ );
5027
- PyObject * fullmodname , * pkgname , * pkgpath , * pkgname_or_unknown ;
5027
+ PyObject * fullmodname , * pkgname , * pkgpath , * pkgname_or_unknown , * errmsg ;
5028
5028
5029
5029
x = PyObject_GetAttr (v , name );
5030
5030
if (x != NULL || !PyErr_ExceptionMatches (PyExc_AttributeError ))
@@ -5039,6 +5039,7 @@ import_from(PyObject *v, PyObject *name)
5039
5039
}
5040
5040
fullmodname = PyUnicode_FromFormat ("%U.%U" , pkgname , name );
5041
5041
if (fullmodname == NULL ) {
5042
+ Py_DECREF (pkgname );
5042
5043
return NULL ;
5043
5044
}
5044
5045
x = PyDict_GetItem (PyImport_GetModuleDict (), fullmodname );
@@ -5063,17 +5064,23 @@ import_from(PyObject *v, PyObject *name)
5063
5064
5064
5065
if (pkgpath == NULL || !PyUnicode_Check (pkgpath )) {
5065
5066
PyErr_Clear ();
5066
- PyErr_SetImportError (
5067
- PyUnicode_FromFormat ("cannot import name %R from %R (unknown location)" ,
5068
- name , pkgname_or_unknown ),
5069
- pkgname , NULL );
5070
- } else {
5071
- PyErr_SetImportError (
5072
- PyUnicode_FromFormat ("cannot import name %R from %R (%S)" ,
5073
- name , pkgname_or_unknown , pkgpath ),
5074
- pkgname , pkgpath );
5067
+ errmsg = PyUnicode_FromFormat (
5068
+ "cannot import name %R from %R (unknown location)" ,
5069
+ name , pkgname_or_unknown
5070
+ );
5071
+ /* NULL check for errmsg done by PyErr_SetImportError. */
5072
+ PyErr_SetImportError (errmsg , pkgname , NULL );
5073
+ }
5074
+ else {
5075
+ errmsg = PyUnicode_FromFormat (
5076
+ "cannot import name %R from %R (%S)" ,
5077
+ name , pkgname_or_unknown , pkgpath
5078
+ );
5079
+ /* NULL check for errmsg done by PyErr_SetImportError. */
5080
+ PyErr_SetImportError (errmsg , pkgname , pkgpath );
5075
5081
}
5076
5082
5083
+ Py_XDECREF (errmsg );
5077
5084
Py_XDECREF (pkgname_or_unknown );
5078
5085
Py_XDECREF (pkgpath );
5079
5086
return NULL ;
0 commit comments