The lua getglobal and rawgeti both push a value onto the lua stack,
but they weren't being removed by the ubus_method_handler function,
thus corrupting the lua stack.
In case the specified method wasn't a function, the stack was also
corrupted as the method name remained on the stack.
Signed-off-by: Karl Vogel <karl.vogel@gmail.com>
lua_getglobal(state, "__ubus_cb");
lua_rawgeti(state, -1, o->r);
lua_getfield(state, -1, method);
+ lua_remove(state, -2);
+ lua_remove(state, -2);
if (lua_isfunction(state, -1)) {
lua_pushlightuserdata(state, req);
else
ubus_lua_parse_blob_array(state, blob_data(msg), blob_len(msg), true);
lua_call(state, 2, 0);
- }
+ } else
+ lua_pop(state, 1);
+
return 0;
}