]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Initialise break/return depth to a frame deeper than the current one in the stack...
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 30 Apr 2025 18:37:42 +0000 (14:37 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 30 Apr 2025 20:22:52 +0000 (16:22 -0400)
src/lib/unlang/unlang_priv.h

index 9713525380914f26e0b6062d80316f5c7cd14b17..3a2937ab40022ec1b23f63c84ba8c42022ea7244 100644 (file)
@@ -453,7 +453,10 @@ static inline unlang_action_t unwind_to_break(unsigned int *break_depth, unlang_
        unsigned int depth;
 
        depth = unlang_frame_by_op_flag(stack, UNLANG_OP_FLAG_BREAK_POINT);
-       if (depth == 0) return UNLANG_ACTION_CALCULATE_RESULT;
+       if (depth == 0) {
+               if (break_depth) *break_depth = stack->depth + 1;       /* Don't cancel any frames! */
+               return UNLANG_ACTION_CALCULATE_RESULT;
+       }
 
        unwind_to_depth(stack, depth + 1);      /* cancel UP TO the break point */
 
@@ -475,7 +478,10 @@ static inline unlang_action_t unwind_to_return(unsigned int *return_depth, unlan
        unsigned int depth;
 
        depth = unlang_frame_by_op_flag(stack, UNLANG_OP_FLAG_RETURN_POINT);
-       if (depth == 0) return UNLANG_ACTION_CALCULATE_RESULT;
+       if (depth == 0) {
+               if (return_depth) *return_depth = stack->depth + 1;     /* Don't cancel any frames! */
+               return UNLANG_ACTION_CALCULATE_RESULT;
+       }
 
        unwind_to_depth(stack, depth + 1);      /* cancel UP TO the break point */