summaryrefslogtreecommitdiff
path: root/Src
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2009-09-21 20:49:21 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2009-09-21 20:49:21 +0000
commit997eafdcad85e9a2c59db1141b404dd4c4bcb22d (patch)
tree81c176a54511da8009c70900063e4ba228fe0988 /Src
parente85349fbf793f18211d9280ca80ec8911e05c708 (diff)
downloadzsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.tar.gz
zsh-997eafdcad85e9a2c59db1141b404dd4c4bcb22d.zip
27283: failure to dup fd caused mayhem
Diffstat (limited to 'Src')
-rw-r--r--Src/exec.c1
-rw-r--r--Src/utils.c3
2 files changed, 3 insertions, 1 deletions
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) {