From 4c3937591c510a22c724d18dae9367bb1b786698 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Wed, 16 Nov 2022 20:54:30 -0500 Subject: lua Fix potential event stack OVFL you could return values in the event callbacks that would never be processed this would eventually cause a lua stack overflow settop(0) eats all return values (if any) Change-Id: Icac6b27e592b385421275d4bd899ed3fe1065669 --- apps/plugins/lua/rocklib_events.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/plugins/lua/rocklib_events.c b/apps/plugins/lua/rocklib_events.c index 1c13a6758f..0cdec20213 100644 --- a/apps/plugins/lua/rocklib_events.c +++ b/apps/plugins/lua/rocklib_events.c @@ -253,7 +253,9 @@ static int lua_rev_callback(lua_State *L, struct cb_data *evt) lua_pushlightuserdata(L, evt->data); lua_status = lua_resume(L, 2); /* call the saved function */ - if (lua_status == LUA_YIELD) /* coroutine.yield() disallowed */ + if (lua_status == LUA_SUCCESS) + lua_settop(L, 0); /* eat any value(s) returned */ + else if (lua_status == LUA_YIELD) /* coroutine.yield() disallowed */ luaL_where(L, 1); /* push error string on stack */ return lua_status; -- cgit v1.2.3