[git commit] hush: probably fixing a bug in last LINENO fix

Denys Vlasenko vda.linux at googlemail.com
Thu Feb 8 18:39:42 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=f786901c4bc2e724221e5c07208c3cd7913cb98c
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

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 at googlemail.com>
---
 shell/hush.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index f2ffcf54d..8f1017e3c 100644
--- a/shell/hush.c
+++ b/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;


More information about the busybox-cvs mailing list