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:
Denys Vlasenko 2010-05-17 09:49:47 +02:00
parent 0f01b00d74
commit 3227d3f982
4 changed files with 12 additions and 7 deletions

View File

@ -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;

View File

@ -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: $?

View 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: $?