aboutsummaryrefslogtreecommitdiffstats
path: root/proto/static
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2022-03-09 02:32:29 +0100
committerOndrej Zajicek <santiago@crfreenet.org>2022-06-27 21:13:32 +0200
commita2527ee53d9d8fe7a1c29b56f8450b9ef1f9c7bc (patch)
treea4dbac6cea35ef3c675c9a12b37dc67719b1b5ac /proto/static
parentf31f4e6eef1762a4b9bf54a274f1ba9e9e161802 (diff)
downloadbird-a2527ee53d9d8fe7a1c29b56f8450b9ef1f9c7bc.tar.gz
Filter: Improve handling of stack frames in filter bytecode
When f_line is done, we have to pop the stack frame. The old code just removed nominal number of args/vars. Change it to use stored ventry value modified by number of returned values. This allows to allocate variables on a stack frame during execution of f_lines instead of just at start. But we need to know the number of returned values for a f_line. It is 1 for term, 0 for cmd. Store that to f_line during linearization.
Diffstat (limited to 'proto/static')
-rw-r--r--proto/static/config.Y2
1 files changed, 1 insertions, 1 deletions
diff --git a/proto/static/config.Y b/proto/static/config.Y
index 41e10dbf..9d26ee82 100644
--- a/proto/static/config.Y
+++ b/proto/static/config.Y
@@ -40,7 +40,7 @@ static_route_finish(void)
if (net_type_match(this_srt->net, NB_DEST) == !this_srt->dest)
cf_error("Unexpected or missing nexthop/type");
- this_srt->cmds = f_linearize(this_srt_cmds);
+ this_srt->cmds = f_linearize(this_srt_cmds, 0);
}
CF_DECLS