From 8ca5c96f0c45a4e224193820cb2aaf10059bfb07 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Sat, 19 May 2018 02:39:54 +0800 Subject: eval: Fail immediately with redirections errors for simple command Previously, dash would continue to perform variable expansions even if a redirection error occured. This patch changes it so that it fails immediately. Signed-off-by: Herbert Xu --- src/eval.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/eval.c b/src/eval.c index bdc3893..cda9ab4 100644 --- a/src/eval.c +++ b/src/eval.c @@ -818,6 +818,17 @@ evalcommand(union node *cmd, int flags) redir_stop = pushredir(cmd->ncmd.redirect); status = redirectsafe(cmd->ncmd.redirect, REDIR_PUSH|REDIR_SAVEFD2); + if (status) { +bail: + exitstatus = status; + + /* We have a redirection error. */ + if (spclbltin > 0) + exraise(EXERROR); + + goto out; + } + for (argp = cmd->ncmd.assign; argp; argp = argp->narg.next) { struct strlist **spp; @@ -848,30 +859,19 @@ evalcommand(union node *cmd, int flags) !(cmdentry.u.cmd->flags & BUILTIN_REGULAR)) { find_command(argv[0], &cmdentry, cmd_flag | DO_ERR, unlikely(path) ? path : pathval()); - if (cmdentry.cmdtype == CMDUNKNOWN) { - status = 127; -#ifdef FLUSHERR - flushout(&errout); -#endif - goto bail; - } - } - - if (status) { -bail: - exitstatus = status; - - /* We have a redirection error. */ - if (spclbltin > 0) - exraise(EXERROR); - - goto out; } jp = NULL; /* Execute the command. */ switch (cmdentry.cmdtype) { + case CMDUNKNOWN: + status = 127; +#ifdef FLUSHERR + flushout(&errout); +#endif + goto bail; + default: /* Fork off a child process if necessary. */ if (!(flags & EV_EXIT) || have_traps()) { -- cgit 1.4.1