summaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-07-14 14:33:37 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-07-14 16:32:19 +0200
commitd3480dd58211d9d8c06ec7ef00089262603003ff (patch)
tree447a49b67af1f714bf725065469c697e810300c7 /editors
parentd62627487a44d9175b05d49846aeef83fed97019 (diff)
downloadbusybox-d3480dd58211d9d8c06ec7ef00089262603003ff.tar.gz
awk: disallow break/continue outside of loops
function old new delta .rodata 104139 104186 +47 chain_group 610 633 +23 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 70/0) Total: 70 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors')
-rw-r--r--editors/awk.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/editors/awk.c b/editors/awk.c
index 2f8a18c8e..607d69487 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -1671,16 +1671,18 @@ static void chain_group(void)
case OC_BREAK:
debug_printf_parse("%s: OC_BREAK\n", __func__);
n = chain_node(OC_EXEC);
+ if (!break_ptr)
+ syntax_error("'break' not in a loop");
n->a.n = break_ptr;
-//TODO: if break_ptr is NULL, syntax error (not in the loop)?
chain_expr(t_info);
break;
case OC_CONTINUE:
debug_printf_parse("%s: OC_CONTINUE\n", __func__);
n = chain_node(OC_EXEC);
+ if (!continue_ptr)
+ syntax_error("'continue' not in a loop");
n->a.n = continue_ptr;
-//TODO: if continue_ptr is NULL, syntax error (not in the loop)?
chain_expr(t_info);
break;