summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2022-03-30 07:53:03 -0400
committerGitHub <noreply@github.com>2022-03-30 07:53:03 -0400
commiteda1d29a06581860f4b78d5a49b27922d38d86e4 (patch)
tree5112530bfa161ac0aea4be0713592ad78e7e694c
parent2f7f0f77c5982a72fe535fe3906f3e6caa692669 (diff)
parent9aa2174c3990169e46b23b6e07cd87c145e364ed (diff)
Merge pull request #10918 from opensourcerouting/fix/bgpd_crash
bgpd: Fix Lua route-map crash
-rw-r--r--bgpd/bgp_script.c9
-rw-r--r--lib/frrscript.c6
2 files changed, 8 insertions, 7 deletions
diff --git a/bgpd/bgp_script.c b/bgpd/bgp_script.c
index 9446a25a05..bf3e612bfd 100644
--- a/bgpd/bgp_script.c
+++ b/bgpd/bgp_script.c
@@ -156,18 +156,19 @@ void lua_pushattr(lua_State *L, const struct attr *attr)
void lua_decode_attr(lua_State *L, int idx, struct attr *attr)
{
- lua_getfield(L, -1, "metric");
+ lua_getfield(L, idx, "metric");
attr->med = lua_tointeger(L, -1);
lua_pop(L, 1);
- lua_getfield(L, -1, "ifindex");
+ lua_getfield(L, idx, "ifindex");
attr->nh_ifindex = lua_tointeger(L, -1);
lua_pop(L, 1);
- lua_getfield(L, -1, "aspath");
+ lua_getfield(L, idx, "aspath");
attr->aspath = aspath_str2aspath(lua_tostring(L, -1));
lua_pop(L, 1);
- lua_getfield(L, -1, "localpref");
+ lua_getfield(L, idx, "localpref");
attr->local_pref = lua_tointeger(L, -1);
lua_pop(L, 1);
+ lua_pop(L, 1);
}
void *lua_toattr(lua_State *L, int idx)
diff --git a/lib/frrscript.c b/lib/frrscript.c
index 4fee79991a..8add44c19e 100644
--- a/lib/frrscript.c
+++ b/lib/frrscript.c
@@ -373,7 +373,7 @@ int frrscript_load(struct frrscript *fs, const char *function_name,
}
if (luaL_dofile(L, script_name) != 0) {
- zlog_err("frrscript: failed loading script '%s.lua': error: %s",
+ zlog_err("frrscript: failed loading script '%s': error: %s",
script_name, lua_tostring(L, -1));
goto fail;
}
@@ -381,7 +381,7 @@ int frrscript_load(struct frrscript *fs, const char *function_name,
/* To check the Lua function, we get it from the global table */
lua_getglobal(L, function_name);
if (lua_isfunction(L, lua_gettop(L)) == 0) {
- zlog_err("frrscript: loaded script '%s.lua' but %s not found",
+ zlog_err("frrscript: loaded script '%s' but %s not found",
script_name, function_name);
goto fail;
}
@@ -391,7 +391,7 @@ int frrscript_load(struct frrscript *fs, const char *function_name,
if (load_cb && (*load_cb)(fs) != 0) {
zlog_err(
- "frrscript: '%s.lua': %s: loaded but callback returned non-zero exit code",
+ "frrscript: '%s': %s: loaded but callback returned non-zero exit code",
script_name, function_name);
goto fail;
}