ash: eval: Fail immediately with redirections errors for simple command
Upstream commit: Date: Sat, 19 May 2018 02:39:54 +0800 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 <herbert@gondor.apana.org.au> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
7eb8eecbbc
commit
54bef2a8ef
32
shell/ash.c
32
shell/ash.c
@ -10253,6 +10253,17 @@ evalcommand(union node *cmd, int flags)
|
||||
}
|
||||
status = redirectsafe(cmd->ncmd.redirect, REDIR_PUSH | REDIR_SAVEFD2);
|
||||
|
||||
if (status) {
|
||||
bail:
|
||||
exitstatus = status;
|
||||
|
||||
/* We have a redirection error. */
|
||||
if (spclbltin > 0)
|
||||
raise_exception(EXERROR);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
for (argp = cmd->ncmd.assign; argp; argp = argp->narg.next) {
|
||||
struct strlist **spp;
|
||||
|
||||
@ -10304,28 +10315,17 @@ evalcommand(union node *cmd, int flags)
|
||||
) {
|
||||
find_command(argv[0], &cmdentry, cmd_flag | DO_ERR,
|
||||
path ? path : pathval());
|
||||
if (cmdentry.cmdtype == CMDUNKNOWN) {
|
||||
status = 127;
|
||||
flush_stdout_stderr();
|
||||
goto bail;
|
||||
}
|
||||
}
|
||||
|
||||
if (status) {
|
||||
bail:
|
||||
exitstatus = status;
|
||||
|
||||
/* We have a redirection error. */
|
||||
if (spclbltin > 0)
|
||||
raise_exception(EXERROR);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
||||
jp = NULL;
|
||||
|
||||
/* Execute the command. */
|
||||
switch (cmdentry.cmdtype) {
|
||||
case CMDUNKNOWN:
|
||||
status = 127;
|
||||
flush_stdout_stderr();
|
||||
goto bail;
|
||||
|
||||
default: {
|
||||
|
||||
#if ENABLE_FEATURE_SH_STANDALONE \
|
||||
|
@ -1,2 +1 @@
|
||||
./redir_exec1.tests: line 1: can't create /cant/be/created: nonexistent directory
|
||||
First
|
||||
|
Loading…
Reference in New Issue
Block a user