diff options
| author | Peter Stephenson <pws@users.sourceforge.net> | 2009-09-21 20:49:21 +0000 |
|---|---|---|
| committer | Peter Stephenson <pws@users.sourceforge.net> | 2009-09-21 20:49:21 +0000 |
| commit | 997eafdcad85e9a2c59db1141b404dd4c4bcb22d (patch) | |
| tree | 81c176a54511da8009c70900063e4ba228fe0988 | |
| parent | users/14411: Src/hashtable.c: only hash stat-able executable regular (diff) | |
| download | zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar.gz zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar.bz2 zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar.lz zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar.xz zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar.zst zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.zip | |
27283: failure to dup fd caused mayhem
| -rw-r--r-- | ChangeLog | 7 | ||||
| -rw-r--r-- | Src/exec.c | 1 | ||||
| -rw-r--r-- | Src/utils.c | 3 |
3 files changed, 9 insertions, 2 deletions
@@ -1,3 +1,8 @@ +2009-09-21 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * 27283: Src/exec.c, Src/utils.c: failure to dup fd accessed + uninitialised memory and closed the original fd regardless. + 2009-09-21 Peter Stephenson <pws@csr.com> * users/14411: Src/hashtable.c: only hash stat-able executable @@ -12197,5 +12202,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4784 $ +* $Revision: 1.4785 $ ***************************************************** diff --git a/Src/exec.c b/Src/exec.c index e68237948..ca9cf0f4d 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -1980,6 +1980,7 @@ addfd(int forked, int *save, struct multio **mfds, int fd1, int fd2, int rflag, */ if (fdN < 0 && errno != EBADF) { zerr("cannot duplicate fd %d: %e", fd1, errno); + mfds[fd1] = NULL; closemnodes(mfds); return; } diff --git a/Src/utils.c b/Src/utils.c index ad4ffca92..a12914787 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -1631,7 +1631,8 @@ movefd(int fd) #else int fe = movefd(dup(fd)); #endif - zclose(fd); + if (fe != -1) + zclose(fd); fd = fe; } if(fd != -1) { |
