hush: probably fixing a bug in last LINENO fix
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 8 Feb 2018 18:39:42 +0000 (19:39 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 8 Feb 2018 18:39:42 +0000 (19:39 +0100)
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>
shell/hush.c

index f2ffcf54d6ba248734e0c23fea8da964bab220d6..8f1017e3c8856f4be41d539a288d286e792f0386 100644 (file)
@@ -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;