Skip to content

Commit d3035d5

Browse files
committed
do not leak the FILE * pointer in error cases of fdopen()
1 parent cadd22f commit d3035d5

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

Modules/posixmodule.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6906,6 +6906,11 @@ posix_fdopen(PyObject *self, PyObject *args)
69066906
}
69076907
}
69086908
#endif
6909+
/* The dummy filename used here must be kept in sync with the value
6910+
tested against in gzip.GzipFile.__init__() - see issue #13781. */
6911+
f = PyFile_FromFile(NULL, "<fdopen>", orgmode, fclose);
6912+
if (f == NULL)
6913+
return NULL;
69096914
Py_BEGIN_ALLOW_THREADS
69106915
#if !defined(MS_WINDOWS) && defined(HAVE_FCNTL_H)
69116916
if (mode[0] == 'a') {
@@ -6926,13 +6931,10 @@ posix_fdopen(PyObject *self, PyObject *args)
69266931
#endif
69276932
Py_END_ALLOW_THREADS
69286933
PyMem_FREE(mode);
6929-
if (fp == NULL)
6934+
if (fp == NULL) {
6935+
Py_DECREF(f);
69306936
return posix_error();
6931-
/* The dummy filename used here must be kept in sync with the value
6932-
tested against in gzip.GzipFile.__init__() - see issue #13781. */
6933-
f = PyFile_FromFile(NULL, "<fdopen>", orgmode, fclose);
6934-
if (f == NULL)
6935-
return NULL;
6937+
}
69366938
/* We now know we will succeed, so initialize the file object. */
69376939
((PyFileObject *)f)->f_fp = fp;
69386940
PyFile_SetBufSize(f, bufsize);

0 commit comments

Comments
 (0)