[OpenWrt-Devel] [PATCH 1/5] Fix stack overflow bug of uloop lua binding.

xfguo at credosemi.com xfguo at credosemi.com
Fri Jun 20 07:31:17 EDT 2014


The static variable `state` in `lua/uloop.c` should be clean after every callback.

Signed-off-by: Xiongfei(Alex) Guo <xfguo at credosemi.com>
---
 lua/uloop.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lua/uloop.c b/lua/uloop.c
index 51f53c2..5922e04 100644
--- a/lua/uloop.c
+++ b/lua/uloop.c
@@ -43,6 +43,7 @@ static void ul_timer_cb(struct uloop_timeout *t)
 
 	lua_getglobal(state, "__uloop_cb");
 	lua_rawgeti(state, -1, tout->r);
+	lua_remove(state, -2);
 	lua_call(state, 0, 0);
 }
 
@@ -133,6 +134,7 @@ static void ul_process_cb(struct uloop_process *p, int ret)
 	lua_getglobal(state, "__uloop_cb");
 	lua_rawgeti(state, -1, proc->r);
 	luaL_unref(state, -2, proc->r);
+	lua_remove(state, -2);
 	lua_pushinteger(state, ret >> 8);
 	lua_call(state, 1, 0);
 }
-- 
1.9.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list