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>
This commit is contained in:
parent
0f01b00d74
commit
3227d3f982
13
shell/hush.c
13
shell/hush.c
@ -6232,10 +6232,15 @@ static struct pipe *parse_stream(char **pstring,
|
|||||||
is_special = "{}<>;&|()#'" /* special outside of "str" */
|
is_special = "{}<>;&|()#'" /* special outside of "str" */
|
||||||
"\\$\"" IF_HUSH_TICK("`"); /* always special */
|
"\\$\"" IF_HUSH_TICK("`"); /* always special */
|
||||||
/* Are { and } special here? */
|
/* Are { and } special here? */
|
||||||
if (ctx.command->argv /* word [word]{... */
|
if (ctx.command->argv /* word [word]{... - non-special */
|
||||||
|| dest.length /* word{... */
|
|| dest.length /* word{... - non-special */
|
||||||
|| dest.o_quoted /* ""{... */
|
|| dest.o_quoted /* ""{... - non-special */
|
||||||
|| (next != ';' && next != ')' && !strchr(G.ifs, next)) /* {word */
|
|| (next != ';' /* }; - special */
|
||||||
|
&& next != ')' /* }) - special */
|
||||||
|
&& next != '&' /* }& and }&& ... - special */
|
||||||
|
&& next != '|' /* }|| ... - special */
|
||||||
|
&& !strchr(G.ifs, next) /* {word - non-special */
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
/* They are not special, skip "{}" */
|
/* They are not special, skip "{}" */
|
||||||
is_special += 2;
|
is_special += 2;
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
# Bug happens only if there is no space in "}&"
|
|
||||||
{ trap "echo got TERM" TERM; sleep 3; }& sleep 1; kill $!; wait
|
|
||||||
echo Done: $?
|
|
3
shell/hush_test/hush-parsing/group2.tests
Executable file
3
shell/hush_test/hush-parsing/group2.tests
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
# Bug was in handling of "}&" without space
|
||||||
|
{ trap "echo got TERM" TERM; sleep 2; }& sleep 1; kill $!; wait
|
||||||
|
echo Done: $?
|
Loading…
x
Reference in New Issue
Block a user