]> granicus.if.org Git - vim/commitdiff
patch 8.0.0827: Coverity: could leak pty file descriptor v8.0.0827
authorBram Moolenaar <Bram@vim.org>
Tue, 1 Aug 2017 13:08:07 +0000 (15:08 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 1 Aug 2017 13:08:07 +0000 (15:08 +0200)
Problem:    Coverity: could leak pty file descriptor, theoretically.
Solution:   If channel is NULL, free the file descriptors.

src/os_unix.c
src/version.c

index 5e744b62244939d454f6df5683fe8c3aa8de1d77..ff7661833f73108735f8b1b2be66d7cbab8a521a 100644 (file)
@@ -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, jobopt_T *options)
                     ? 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;
index 014dab616833b32ec9c78488c59b4a1babb402c0..732e8a52693576bef11daa7ad87e976ad0686f4c 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    827,
 /**/
     826,
 /**/