diff options
author | Denys Vlasenko | 2019-01-03 23:34:36 +0100 |
---|---|---|
committer | Denys Vlasenko | 2019-01-03 23:34:36 +0100 |
commit | 96b5ec10fb8abdb8050a6af87330e6cf3d881d5a (patch) | |
tree | 8fbc53fb1f7057170415adf6516319dcba2e7cdc /miscutils | |
parent | ae6c44ea15f4b73e8e5532f6392d1e6ce8c087e7 (diff) | |
download | busybox-96b5ec10fb8abdb8050a6af87330e6cf3d881d5a.zip busybox-96b5ec10fb8abdb8050a6af87330e6cf3d881d5a.tar.gz |
bc: fix "...; return}" to work, disallow "return ()"
function old new delta
zbc_parse_expr 24 1865 +1841
zbc_parse_stmt_possibly_auto 1425 1413 -12
bc_parse_expr_empty_ok 1843 - -1843
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 1841/-1855) Total: -14 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/bc.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index e5726ca..6d8e2d9 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -4121,18 +4121,15 @@ static BC_STATUS zbc_parse_return(void) if (s) RETURN_STATUS(s); t = p->lex; - if (t == XC_LEX_NLINE || t == BC_LEX_SCOLON) + if (t == XC_LEX_NLINE || t == BC_LEX_SCOLON || t == BC_LEX_RBRACE) xc_parse_push(BC_INST_RET0); else { - bool paren = (t == BC_LEX_LPAREN); - s = bc_parse_expr_empty_ok(0); - if (s == BC_STATUS_PARSE_EMPTY_EXP) { - xc_parse_push(BC_INST_RET0); - s = zxc_lex_next(); - } + s = zbc_parse_expr(0); if (s) RETURN_STATUS(s); - if (!paren || p->lex_last != BC_LEX_RPAREN) { + if (t != BC_LEX_LPAREN // "return EXPR", no () + || p->lex_last != BC_LEX_RPAREN // example: "return (a) + b" + ) { s = zbc_POSIX_requires("parentheses around return expressions"); if (s) RETURN_STATUS(s); } |