hush: fix handling of unterminated subshell: (<eof>. Fixes bug 229.
function old new delta syntax_error_unexpected_ch 31 41 +10 parse_stream 2184 2191 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
aa0a12d549
commit
b1cfc45376
15
shell/hush.c
15
shell/hush.c
@ -780,12 +780,12 @@ static void syntax_error_unterm_str(unsigned lineno, const char *s)
|
||||
die_if_script(lineno, "syntax error: unterminated %s", s);
|
||||
}
|
||||
|
||||
static void syntax_error_unexpected_ch(unsigned lineno, char ch)
|
||||
static void syntax_error_unexpected_ch(unsigned lineno, int ch)
|
||||
{
|
||||
char msg[2];
|
||||
msg[0] = ch;
|
||||
msg[1] = '\0';
|
||||
die_if_script(lineno, "syntax error: unexpected %s", msg);
|
||||
die_if_script(lineno, "syntax error: unexpected %s", ch == EOF ? "EOF" : msg);
|
||||
}
|
||||
|
||||
#if HUSH_DEBUG < 2
|
||||
@ -5448,10 +5448,17 @@ static struct pipe *parse_stream(char **pstring,
|
||||
|
||||
if (heredoc_cnt) {
|
||||
syntax_error_unterm_str("here document");
|
||||
xfunc_die();
|
||||
goto parse_error;
|
||||
}
|
||||
/* end_trigger == '}' case errors out earlier,
|
||||
* checking only ')' */
|
||||
if (end_trigger == ')') {
|
||||
syntax_error_unterm_ch('('); /* exits */
|
||||
/* goto parse_error; */
|
||||
}
|
||||
|
||||
if (done_word(&dest, &ctx)) {
|
||||
xfunc_die();
|
||||
goto parse_error;
|
||||
}
|
||||
o_free(&dest);
|
||||
done_pipe(&ctx, PIPE_SEQ);
|
||||
|
Loading…
Reference in New Issue
Block a user