Mercurial > vim
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;