diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-09-20 17:22:24 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-09-20 17:22:24 +0300 |
commit | d6a37d86ba65ce3d43600bfc52f7ba56de68942d (patch) | |
tree | 3ba60c14be6100c5b3309d012ae633fd5907b7c7 /shell/hush.c | |
parent | 4ff86df861069e51ee796bac4e8ead942f8985f5 (diff) |
hush: document better where bad redirect syntax is detected
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/shell/hush.c b/shell/hush.c index a8ec54ec0..e2b0a15b8 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -3054,6 +3054,14 @@ static int done_command(struct parse_context *ctx) struct pipe *pi = ctx->pipe; struct command *command = ctx->command; +#if 0 /* Instead we emit error message at run time */ + if (ctx->pending_redirect) { + /* For example, "cmd >" (no filename to redirect to) */ + die_if_script("syntax error: %s", "invalid redirect"); + ctx->pending_redirect = NULL; + } +#endif + if (command) { if (IS_NULL_CMD(command)) { debug_printf_parse("done_command: skipping null cmd, num_cmds=%d\n", pi->num_cmds); @@ -3576,6 +3584,12 @@ static int parse_redirect(struct parse_context *ctx, debug_printf_parse("duplicating redirect '%d>&%d'\n", redir->rd_fd, redir->rd_dup); } else { +#if 0 /* Instead we emit error message at run time */ + if (ctx->pending_redirect) { + /* For example, "cmd > <file" */ + die_if_script("syntax error: %s", "invalid redirect"); + } +#endif /* Set ctx->pending_redirect, so we know what to do at the * end of the next parsed word. */ ctx->pending_redirect = redir; @@ -6276,9 +6290,12 @@ static int setup_redirects(struct command *prog, int squirrel[]) /* "rd_fd<*>file" case (<*> is <,>,>>,<>) */ char *p; if (redir->rd_filename == NULL) { - /* Something went wrong in the parse. - * Pretend it didn't happen */ - bb_error_msg("bug in redirect parse"); + /* + * Examples: + * "cmd >" (no filename) + * "cmd > <file" (2nd redirect starts too early) + */ + die_if_script("syntax error: %s", "invalid redirect"); continue; } mode = redir_table[redir->rd_type].mode; |