same as previous, but -100 bytes
This commit is contained in:
38
shell/hush.c
38
shell/hush.c
@ -5476,22 +5476,24 @@ static struct pipe *parse_stream(char **pstring,
|
|||||||
* will still trigger for us */
|
* will still trigger for us */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* "cmd}" or "cmd }..." without semicolon or &:
|
||||||
|
* } is an ordinary char in this case, even inside { cmd; }
|
||||||
|
* Pathological example: { ""}; } should exec "}" cmd
|
||||||
|
*/
|
||||||
|
if (ch == '}'
|
||||||
|
&& !(IS_NULL_PIPE(ctx.pipe)
|
||||||
|
&& IS_NULL_CMD(ctx.command)
|
||||||
|
&& dest.length == 0
|
||||||
|
&& !dest.o_quoted
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
goto ordinary_char;
|
||||||
|
}
|
||||||
|
|
||||||
if (end_trigger && end_trigger == ch
|
if (end_trigger && end_trigger == ch
|
||||||
&& (heredoc_cnt == 0 || end_trigger != ';')
|
&& (heredoc_cnt == 0 || end_trigger != ';')
|
||||||
) {
|
) {
|
||||||
/* "{ cmd}" or "{ cmd }..." without semicolon or &:
|
|
||||||
* } is an ordinary char in this case.
|
|
||||||
* Pathological example: { ""}; } should exec "}" cmd
|
|
||||||
*/
|
|
||||||
if (ch == '}'
|
|
||||||
&& !(IS_NULL_PIPE(ctx.pipe)
|
|
||||||
&& IS_NULL_CMD(ctx.command)
|
|
||||||
&& dest.length == 0
|
|
||||||
&& !dest.o_quoted
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
goto ordinary_char;
|
|
||||||
}
|
|
||||||
if (heredoc_cnt) {
|
if (heredoc_cnt) {
|
||||||
/* This is technically valid:
|
/* This is technically valid:
|
||||||
* { cat <<HERE; }; echo Ok
|
* { cat <<HERE; }; echo Ok
|
||||||
@ -5757,16 +5759,6 @@ static struct pipe *parse_stream(char **pstring,
|
|||||||
goto case_semi;
|
goto case_semi;
|
||||||
#endif
|
#endif
|
||||||
case '}':
|
case '}':
|
||||||
if (!(IS_NULL_PIPE(ctx.pipe)
|
|
||||||
&& IS_NULL_CMD(ctx.command)
|
|
||||||
&& dest.length == 0
|
|
||||||
&& !dest.o_quoted
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
/* } not preceded by ; or & is an ordinary
|
|
||||||
* char, example: "echo }" */
|
|
||||||
goto ordinary_char;
|
|
||||||
}
|
|
||||||
/* proper use of this character is caught by end_trigger:
|
/* proper use of this character is caught by end_trigger:
|
||||||
* if we see {, we call parse_group(..., end_trigger='}')
|
* if we see {, we call parse_group(..., end_trigger='}')
|
||||||
* and it will match } earlier (not here). */
|
* and it will match } earlier (not here). */
|
||||||
|
Reference in New Issue
Block a user