From 8431e478d2f74ebf0bcfd2bc4c71e3c391fc7753 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 23 Jun 2014 19:05:15 +0000 Subject: * spawn.cc (find_exec): Initialize err (CID 60111). * strace.cc (strace::activate): Fix potential buffer overrun (CID 59938) * syscalls.cc (popen): Close parent pipe descriptor via fclosing fp on error to avoid resource leak (CID 59981). * thread.cc (pthread::exit): Avoid accessing cygtls member after deleting "this" (CID 60217). --- winsup/cygwin/syscalls.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'winsup/cygwin/syscalls.cc') diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index de8cf119c..9edacd520 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -4355,8 +4355,17 @@ popen (const char *command, const char *in_type) /* If we reach here we've seen an error but the pipe handles are open. Close them and return NULL. */ int save_errno = get_errno (); - close (fds[0]); - close (fds[1]); + if (fp) + { + /* Must fclose fp to avoid memory leak. */ + fclose (fp); + close (fds[myix ^ 1]); + } + else + { + close (fds[0]); + close (fds[1]); + } set_errno (save_errno); #undef rw -- cgit v1.2.3