hush: fix hush-bugs/parse_err.tests
No binary (build failed)
—
(log yok)
| @@ -6232,10 +6232,15 @@ static struct pipe *parse_stream(char **pstring, | |
| is_special = "{}<>;&|()#'" /* special outside of "str" */ | |
| "\\$\"" IF_HUSH_TICK("`"); /* always special */ | |
| /* Are { and } special here? */ | |
| - | if (ctx.command->argv /* word [word]{... */ |
| - | || dest.length /* word{... */ |
| - | || dest.o_quoted /* ""{... */ |
| - | || (next != ';' && next != ')' && !strchr(G.ifs, next)) /* {word */ |
| + | if (ctx.command->argv /* word [word]{... - non-special */ |
| + | || dest.length /* word{... - non-special */ |
| + | || dest.o_quoted /* ""{... - non-special */ |
| + | || (next != ';' /* }; - special */ |
| + | && next != ')' /* }) - special */ |
| + | && next != '&' /* }& and }&& ... - special */ |
| + | && next != '|' /* }|| ... - special */ |
| + | && !strchr(G.ifs, next) /* {word - non-special */ |
| + | ) |
| ) { | |
| /* They are not special, skip "{}" */ | |
| 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: $? |
| @@ -0,0 +1,3 @@ | |
| + | # Bug was in handling of "}&" without space |
| + | { trap "echo got TERM" TERM; sleep 2; }& sleep 1; kill $!; wait |
| + | echo Done: $? |