hush: probably fixing a bug in last LINENO fix
I don't have an example of mishandled script, but the logic looked wrong: it could sometimes treat newlines as if they are spaces. function old new delta parse_stream 2788 2787 -1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
5807e18f0c
commit
f786901c4b
17
shell/hush.c
17
shell/hush.c
@ -5019,18 +5019,13 @@ static struct pipe *parse_stream(char **pstring,
|
||||
* i.e., at the previous line.
|
||||
* We need to skip all whitespace before newlines.
|
||||
*/
|
||||
if (ch != '\n') {
|
||||
/* It was whitespace, but not a newline.
|
||||
* Eat all whitespace.
|
||||
*/
|
||||
for (;;) {
|
||||
next = i_peek(input);
|
||||
if (next != ' ' && next != '\t' && next != '\n')
|
||||
break; /* next char is not ws */
|
||||
ch = i_getch(input);
|
||||
}
|
||||
/* ch == last eaten whitespace char */
|
||||
while (ch != '\n') {
|
||||
next = i_peek(input);
|
||||
if (next != ' ' && next != '\t' && next != '\n')
|
||||
break; /* next char is not ws */
|
||||
ch = i_getch(input);
|
||||
}
|
||||
/* ch == last eaten whitespace char */
|
||||
#endif
|
||||
if (done_word(&dest, &ctx)) {
|
||||
goto parse_error;
|
||||
|
Loading…
x
Reference in New Issue
Block a user