mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
zipimporter_load_module() doesn't destroy mod on error
PyImport_AddModule() returns a borrowed reference. Don't display "import ... # loaded from Zip ..." on error.
This commit is contained in:
parent
72f767e601
commit
26fabe1369
1 changed files with 9 additions and 9 deletions
|
@ -309,7 +309,7 @@ static PyObject *
|
|||
zipimporter_load_module(PyObject *obj, PyObject *args)
|
||||
{
|
||||
ZipImporter *self = (ZipImporter *)obj;
|
||||
PyObject *code, *mod, *dict;
|
||||
PyObject *code = NULL, *mod, *dict;
|
||||
char *fullname, *modpath;
|
||||
int ispackage;
|
||||
|
||||
|
@ -319,13 +319,11 @@ zipimporter_load_module(PyObject *obj, PyObject *args)
|
|||
|
||||
code = get_module_code(self, fullname, &ispackage, &modpath);
|
||||
if (code == NULL)
|
||||
return NULL;
|
||||
goto error;
|
||||
|
||||
mod = PyImport_AddModule(fullname);
|
||||
if (mod == NULL) {
|
||||
Py_DECREF(code);
|
||||
return NULL;
|
||||
}
|
||||
if (mod == NULL)
|
||||
goto error;
|
||||
dict = PyModule_GetDict(mod);
|
||||
|
||||
/* mod.__loader__ = self */
|
||||
|
@ -355,14 +353,16 @@ zipimporter_load_module(PyObject *obj, PyObject *args)
|
|||
goto error;
|
||||
}
|
||||
mod = PyImport_ExecCodeModuleEx(fullname, code, modpath);
|
||||
Py_DECREF(code);
|
||||
Py_CLEAR(code);
|
||||
if (mod == NULL)
|
||||
goto error;
|
||||
|
||||
if (Py_VerboseFlag)
|
||||
PySys_WriteStderr("import %s # loaded from Zip %s\n",
|
||||
fullname, modpath);
|
||||
return mod;
|
||||
error:
|
||||
Py_DECREF(code);
|
||||
Py_DECREF(mod);
|
||||
Py_XDECREF(code);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue