]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
zipimporter_load_module() doesn't destroy mod on error
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 18 Oct 2010 12:03:25 +0000 (12:03 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 18 Oct 2010 12:03:25 +0000 (12:03 +0000)
PyImport_AddModule() returns a borrowed reference. Don't display "import ... #
loaded from Zip ..." on error.

Modules/zipimport.c

index 64dbdbc525b188280d62d8c86315ce100a7582c7..a35b8c801ceeca5e2e26921b4a6b2bda1342aec7 100644 (file)
@@ -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;
 }