hush: fix a possible bug
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 21 Jul 2016 12:40:08 +0000 (14:40 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 21 Jul 2016 12:42:13 +0000 (14:42 +0200)
Not sure this was actually a triggerable bug, but the code looked flaky.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c

index eabe83ac63e33dbcfc87b765a3353fa83704e46c..ab192e2cde9b82db5c52dbf25a02ccf53a6bc57e 100644 (file)
@@ -9153,9 +9153,11 @@ static int FAST_FUNC builtin_break(char **argv)
        unsigned depth;
        if (G.depth_of_loop == 0) {
                bb_error_msg("%s: only meaningful in a loop", argv[0]);
+               /* if we came from builtin_continue(), need to undo "= 1" */
+               G.flag_break_continue = 0;
                return EXIT_SUCCESS; /* bash compat */
        }
-       G.flag_break_continue++; /* BC_BREAK = 1 */
+       G.flag_break_continue++; /* BC_BREAK = 1, or BC_CONTINUE = 2 */
 
        G.depth_break_continue = depth = parse_numeric_argv1(argv, 1, 1);
        if (depth == UINT_MAX)