From 1dd6cf867754030223fadd0f4d959039f713bfb1 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 2 May 2009 14:17:31 +0200 Subject: hush: fix multiple redirections of the same fd (bug 227) Signed-off-by: Denys Vlasenko --- shell/hush.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'shell/hush.c') diff --git a/shell/hush.c b/shell/hush.c index cbec2dd71..5daca960c 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -2646,7 +2646,9 @@ static int setup_redirects(struct command *prog, int squirrel[]) for (redir = prog->redirects; redir; redir = redir->next) { if (redir->rd_type == REDIRECT_HEREDOC2) { /* rd_fd<rd_fd < 3) { + if (squirrel && redir->rd_fd < 3 + && squirrel[redir->rd_fd] < 0 + ) { squirrel[redir->rd_fd] = dup(redir->rd_fd); } /* for REDIRECT_HEREDOC2, rd_filename holds _contents_ @@ -2682,7 +2684,9 @@ static int setup_redirects(struct command *prog, int squirrel[]) } if (openfd != redir->rd_fd) { - if (squirrel && redir->rd_fd < 3) { + if (squirrel && redir->rd_fd < 3 + && squirrel[redir->rd_fd] < 0 + ) { squirrel[redir->rd_fd] = dup(redir->rd_fd); } if (openfd == REDIRFD_CLOSE) { -- cgit v1.2.3