[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