aboutsummaryrefslogtreecommitdiff
path: root/shell/hush.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-10-22 15:55:48 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-10-22 15:55:48 +0200
commit25f3b737dc04bb84fb593ace33a5c360163bd4e4 (patch)
tree07fdb99bc3e583a752bd033d7506f3e3d4d64629 /shell/hush.c
parent045327a418d1cf0a99405ca0b70ed61b5c1a1869 (diff)
downloadbusybox-25f3b737dc04bb84fb593ace33a5c360163bd4e4.tar.gz
hush: fix comment parsing in `cmd`, closes 10421
function old new delta parse_stream 2692 2690 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/hush.c')
-rw-r--r--shell/hush.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/shell/hush.c b/shell/hush.c
index d27550ba0..708555ac4 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -5140,14 +5140,23 @@ static struct pipe *parse_stream(char **pstring,
case '#':
if (dest.length == 0 && !dest.has_quoted_part) {
/* skip "#comment" */
+ /* note: we do not add it to &ctx.as_string */
+/* TODO: in bash:
+ * comment inside $() goes to the next \n, even inside quoted string (!):
+ * cmd "$(cmd2 #comment)" - syntax error
+ * cmd "`cmd2 #comment`" - ok
+ * We accept both (comment ends where command subst ends, in both cases).
+ */
while (1) {
ch = i_peek(input);
- if (ch == EOF || ch == '\n')
+ if (ch == '\n') {
+ nommu_addchr(&ctx.as_string, '\n');
+ break;
+ }
+ ch = i_getch(input);
+ if (ch == EOF)
break;
- i_getch(input);
- /* note: we do not add it to &ctx.as_string */
}
- nommu_addchr(&ctx.as_string, '\n');
continue; /* back to top of while (1) */
}
break;