diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-05-17 09:49:47 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-05-17 09:49:47 +0200 |
commit | 3227d3f982e809fd02b37d6274f1c7da0a307cea (patch) | |
tree | 91a012dc7a9fdf3016f2258e05d4588e2cb89bf1 /shell | |
parent | 0f01b00d742f92061cbbd9e95d1cd0368c4d2a4c (diff) | |
download | busybox-w32-3227d3f982e809fd02b37d6274f1c7da0a307cea.tar.gz busybox-w32-3227d3f982e809fd02b37d6274f1c7da0a307cea.tar.bz2 busybox-w32-3227d3f982e809fd02b37d6274f1c7da0a307cea.zip |
hush: fix hush-bugs/parse_err.tests
function old new delta
parse_stream 2325 2339 +14
builtin_umask 121 123 +2
builtin_type 116 114 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 13 | ||||
-rwxr-xr-x | shell/hush_test/hush-bugs/parse_err.tests | 3 | ||||
-rw-r--r-- | shell/hush_test/hush-parsing/group2.right (renamed from shell/hush_test/hush-bugs/parse_err.right) | 0 | ||||
-rwxr-xr-x | shell/hush_test/hush-parsing/group2.tests | 3 |
4 files changed, 12 insertions, 7 deletions
diff --git a/shell/hush.c b/shell/hush.c index 07cacbfc9..1bc0c611d 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -6232,10 +6232,15 @@ static struct pipe *parse_stream(char **pstring, | |||
6232 | is_special = "{}<>;&|()#'" /* special outside of "str" */ | 6232 | is_special = "{}<>;&|()#'" /* special outside of "str" */ |
6233 | "\\$\"" IF_HUSH_TICK("`"); /* always special */ | 6233 | "\\$\"" IF_HUSH_TICK("`"); /* always special */ |
6234 | /* Are { and } special here? */ | 6234 | /* Are { and } special here? */ |
6235 | if (ctx.command->argv /* word [word]{... */ | 6235 | if (ctx.command->argv /* word [word]{... - non-special */ |
6236 | || dest.length /* word{... */ | 6236 | || dest.length /* word{... - non-special */ |
6237 | || dest.o_quoted /* ""{... */ | 6237 | || dest.o_quoted /* ""{... - non-special */ |
6238 | || (next != ';' && next != ')' && !strchr(G.ifs, next)) /* {word */ | 6238 | || (next != ';' /* }; - special */ |
6239 | && next != ')' /* }) - special */ | ||
6240 | && next != '&' /* }& and }&& ... - special */ | ||
6241 | && next != '|' /* }|| ... - special */ | ||
6242 | && !strchr(G.ifs, next) /* {word - non-special */ | ||
6243 | ) | ||
6239 | ) { | 6244 | ) { |
6240 | /* They are not special, skip "{}" */ | 6245 | /* They are not special, skip "{}" */ |
6241 | is_special += 2; | 6246 | is_special += 2; |
diff --git a/shell/hush_test/hush-bugs/parse_err.tests b/shell/hush_test/hush-bugs/parse_err.tests deleted file mode 100755 index dd7d9ad64..000000000 --- a/shell/hush_test/hush-bugs/parse_err.tests +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Bug happens only if there is no space in "}&" | ||
2 | { trap "echo got TERM" TERM; sleep 3; }& sleep 1; kill $!; wait | ||
3 | echo Done: $? | ||
diff --git a/shell/hush_test/hush-bugs/parse_err.right b/shell/hush_test/hush-parsing/group2.right index df4d9306a..df4d9306a 100644 --- a/shell/hush_test/hush-bugs/parse_err.right +++ b/shell/hush_test/hush-parsing/group2.right | |||
diff --git a/shell/hush_test/hush-parsing/group2.tests b/shell/hush_test/hush-parsing/group2.tests new file mode 100755 index 000000000..d99178585 --- /dev/null +++ b/shell/hush_test/hush-parsing/group2.tests | |||
@@ -0,0 +1,3 @@ | |||
1 | # Bug was in handling of "}&" without space | ||
2 | { trap "echo got TERM" TERM; sleep 2; }& sleep 1; kill $!; wait | ||
3 | echo Done: $? | ||