]> granicus.if.org Git - python/commitdiff
bpo-31723: Fix refleaks when zipimporter.__init__() is called more than once (GH...
authorOren Milman <orenmn@gmail.com>
Mon, 9 Oct 2017 15:06:19 +0000 (18:06 +0300)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 9 Oct 2017 15:06:19 +0000 (08:06 -0700)
Modules/zipimport.c

index 493e6db394a3a8348db99eaa5ba0d47fcb5dcd2d..895cd800fc47c10cebfad9b4fcbdd7c0eb623149 100644 (file)
@@ -164,10 +164,10 @@ zipimport_zipimporter___init___impl(ZipImporter *self, PyObject *path)
     }
     else
         Py_INCREF(files);
-    self->files = files;
+    Py_XSETREF(self->files, files);
 
     /* Transfer reference */
-    self->archive = filename;
+    Py_XSETREF(self->archive, filename);
     filename = NULL;
 
     /* Check if there is a prefix directory following the filename. */
@@ -176,7 +176,7 @@ zipimport_zipimporter___init___impl(ZipImporter *self, PyObject *path)
                                   PyUnicode_GET_LENGTH(path));
         if (tmp == NULL)
             goto error;
-        self->prefix = tmp;
+        Py_XSETREF(self->prefix, tmp);
         if (PyUnicode_READ_CHAR(path, len-1) != SEP) {
             /* add trailing SEP */
             tmp = PyUnicode_FromFormat("%U%c", self->prefix, SEP);
@@ -185,8 +185,9 @@ zipimport_zipimporter___init___impl(ZipImporter *self, PyObject *path)
             Py_SETREF(self->prefix, tmp);
         }
     }
-    else
-        self->prefix = PyUnicode_New(0, 0);
+    else {
+        Py_XSETREF(self->prefix, PyUnicode_New(0, 0));
+    }
     Py_DECREF(path);
     return 0;