From: Oren Milman Date: Mon, 9 Oct 2017 15:06:19 +0000 (+0300) Subject: bpo-31723: Fix refleaks when zipimporter.__init__() is called more than once (GH... X-Git-Tag: v3.7.0a2~35 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c0cabc23bbe474d542ff8a4f1243f4ec3cce5549;p=python bpo-31723: Fix refleaks when zipimporter.__init__() is called more than once (GH-3919) --- diff --git a/Modules/zipimport.c b/Modules/zipimport.c index 493e6db394..895cd800fc 100644 --- a/Modules/zipimport.c +++ b/Modules/zipimport.c @@ -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;