changeset 11894:75a85e99f53e v8.0.0827

patch 8.0.0827: Coverity: could leak pty file descriptor commit https://github.com/vim/vim/commit/979e8c534684737920c1891bf9c4af9e1fdb8c3b Author: Bram Moolenaar <Bram@vim.org> Date: Tue Aug 1 15:08:07 2017 +0200 patch 8.0.0827: Coverity: could leak pty file descriptor Problem: Coverity: could leak pty file descriptor, theoretically. Solution: If channel is NULL, free the file descriptors.
author Christian Brabandt <cb@256bit.org>
date Tue, 01 Aug 2017 15:15:04 +0200
parents af79d760d8a1
children 16438082d51b
files src/os_unix.c src/version.c
diffstat 2 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -4150,6 +4150,11 @@ set_default_child_environment(void)
 #endif
 
 #if defined(FEAT_GUI) || defined(FEAT_JOB_CHANNEL)
+/*
+ * Open a PTY, with FD for the master and slave side.
+ * When failing "pty_master_fd" and "pty_slave_fd" are -1.
+ * When successful both file descriptors are stored.
+ */
     static void
 open_pty(int *pty_master_fd, int *pty_slave_fd)
 {
@@ -5380,6 +5385,17 @@ mch_job_start(char **argv, job_T *job, j
 		     ? INVALID_FD : fd_err[0] < 0 ? pty_master_fd : fd_err[0]);
 	channel_set_job(channel, job, options);
     }
+    else
+    {
+	if (fd_in[1] >= 0)
+	    close(fd_in[1]);
+	if (fd_out[0] >= 0)
+	    close(fd_out[0]);
+	if (fd_err[0] >= 0)
+	    close(fd_err[0]);
+	if (pty_master_fd >= 0)
+	    close(pty_master_fd);
+    }
 
     /* success! */
     return;
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    827,
+/**/
     826,
 /**/
     825,