]> granicus.if.org Git - python/commitdiff
fix refleak in file handle creation error case
authorBenjamin Peterson <benjamin@python.org>
Sat, 3 Dec 2016 19:12:51 +0000 (11:12 -0800)
committerBenjamin Peterson <benjamin@python.org>
Sat, 3 Dec 2016 19:12:51 +0000 (11:12 -0800)
Modules/posixmodule.c

index df3c32671453f9c2da2e59e1d26eecc23a627c39..72bf7d206c5a5cb59dce4320fdeff9e48442a41a 100644 (file)
@@ -6906,13 +6906,6 @@ posix_fdopen(PyObject *self, PyObject *args)
         }
     }
 #endif
-    /* The dummy filename used here must be kept in sync with the value
-       tested against in gzip.GzipFile.__init__() - see issue #13781. */
-    f = PyFile_FromFile(NULL, "<fdopen>", orgmode, fclose);
-    if (f == NULL) {
-        PyMem_FREE(mode);
-        return NULL;
-    }
     Py_BEGIN_ALLOW_THREADS
 #if !defined(MS_WINDOWS) && defined(HAVE_FCNTL_H)
     if (mode[0] == 'a') {
@@ -6935,6 +6928,11 @@ posix_fdopen(PyObject *self, PyObject *args)
     PyMem_FREE(mode);
     if (fp == NULL)
         return posix_error();
+    /* The dummy filename used here must be kept in sync with the value
+       tested against in gzip.GzipFile.__init__() - see issue #13781. */
+    f = PyFile_FromFile(NULL, "<fdopen>", orgmode, fclose);
+    if (f == NULL)
+        return NULL;
     /* We now know we will succeed, so initialize the file object. */
     ((PyFileObject *)f)->f_fp = fp;
     PyFile_SetBufSize(f, bufsize);