klibc-bot for Herbert Xu
2020-Mar-28 21:48 UTC
[klibc] [klibc:update-dash] dash: [BUILTIN] Do not allow break to break across function calls
Commit-ID: 76fe43c4a495381c5e5600f127bb03f3b26b0d94 Gitweb: http://git.kernel.org/?p=libs/klibc/klibc.git;a=commit;h=76fe43c4a495381c5e5600f127bb03f3b26b0d94 Author: Herbert Xu <herbert at gondor.apana.org.au> AuthorDate: Mon, 6 Oct 2014 19:45:58 +0800 Committer: Ben Hutchings <ben at decadent.org.uk> CommitDate: Sat, 28 Mar 2020 21:42:54 +0000 [klibc] dash: [BUILTIN] Do not allow break to break across function calls [ dash commit ebfdd97a10e34a5e70eadfc21ebfc033ef93a563 ] As it is if you do a multi-level break inside a function it'll actually include loops outside of the function call. This is counterintuitive. This patch changes this by saving and resetting loopnest when entering a function. Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au> Signed-off-by: Ben Hutchings <ben at decadent.org.uk> --- usr/dash/eval.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/usr/dash/eval.c b/usr/dash/eval.c index 1c76d4c5..e0c21f94 100644 --- a/usr/dash/eval.c +++ b/usr/dash/eval.c @@ -928,9 +928,11 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags) struct jmploc jmploc; int e; int savefuncline; + int saveloopnest; saveparam = shellparam; savefuncline = funcline; + saveloopnest = loopnest; savehandler = handler; if ((e = setjmp(jmploc.loc))) { goto funcdone; @@ -940,6 +942,7 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags) shellparam.malloc = 0; func->count++; funcline = func->n.ndefun.linno; + loopnest = 0; INTON; shellparam.nparam = argc - 1; shellparam.p = argv + 1; @@ -950,6 +953,7 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags) poplocalvars(0); funcdone: INTOFF; + loopnest = saveloopnest; funcline = savefuncline; freefunc(func); freeparam(&shellparam);
Apparently Analagous Threads
- [klibc:update-dash] [BUILTIN] Do not allow break to break across function calls
- [klibc:update-dash] eval: Variable assignments on functions are no longer persistent
- [klibc:update-dash] dash: eval: Variable assignments on functions are no longer persistent
- [klibc:update-dash] eval: Return status in eval functions
- [klibc:update-dash] dash: eval: Return status in eval functions