klibc-bot for Herbert Xu
2020-Mar-28 21:49 UTC
[klibc] [klibc:update-dash] dash: eval: Fail immediately with redirections errors for simple command
Commit-ID: e9dcd440e4ba1812181839ba803dc0fe2909c43e Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=e9dcd440e4ba1812181839ba803dc0fe2909c43e Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Sat, 19 May 2018 02:39:54 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Sat, 28 Mar 2020 21:42:55 +0000 [klibc] dash: eval: Fail immediately with redirections errors for simple command [ dash commit 8ca5c96f0c45a4e224193820cb2aaf10059bfb07 ] 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 <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/eval.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 9e88fef2..fc5a594a 100644 --- a/usr/dash/eval.c +++ b/usr/dash/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()) {
Seemingly Similar Threads
- [klibc:update-dash] dash: eval: Add assignment built-in support again
- [klibc:update-dash] dash: eval: Replace with listsetvar with mklocal/setvareq
- [klibc:update-dash] [INPUT] Replace open-coded flushall in preadbuffer
- [klibc:update-dash] dash: [INPUT] Replace open-coded flushall in preadbuffer
- [klibc:update-dash] eval: Reap zombies after built-in commands and functions