From: Vsevolod Stakhov Date: Mon, 18 Nov 2019 09:34:17 +0000 (+0000) Subject: [Minor] Add sanity check when trying to insert options X-Git-Tag: 2.2~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5fe363b2ce6705ae2878bf1df3067ef333be1d07;p=thirdparty%2Frspamd.git [Minor] Add sanity check when trying to insert options --- diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index e59bd36859..0be4699fe7 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -1861,27 +1861,48 @@ lua_task_insert_result (lua_State * L) luaL_checkstring (L, args_start)); weight = luaL_checknumber (L, args_start + 1); top = lua_gettop (L); - s = rspamd_task_insert_result_full (task, symbol_name, weight, NULL, flags); + s = rspamd_task_insert_result_full (task, symbol_name, weight, + NULL, flags); /* Get additional options */ if (s) { for (i = args_start + 2; i <= top; i++) { - if (lua_type (L, i) == LUA_TSTRING) { + gint ltype = lua_type (L, i); + + if (ltype == LUA_TSTRING) { param = luaL_checkstring (L, i); rspamd_task_add_result_option (task, s, param); } - else if (lua_type (L, i) == LUA_TTABLE) { + else if (ltype == LUA_TTABLE) { lua_pushvalue (L, i); lua_pushnil (L); while (lua_next (L, -2)) { - param = lua_tostring (L, -1); - rspamd_task_add_result_option (task, s, param); + if (lua_isstring (L, -1)) { + param = lua_tostring (L, -1); + rspamd_task_add_result_option (task, s, param); + } + else { + const gchar *tname = lua_typename (L, lua_type (L, -1)); + lua_pop (L, 2); + + return luaL_error (L, "not a string option in a table " + "when adding symbol %s: %s type", + s->name, tname); + } + lua_pop (L, 1); } lua_pop (L, 1); } + else { + const gchar *tname = lua_typename (L, ltype); + + return luaL_error (L, "not a string/table option " + "when adding symbol %s: %s type", + s->name, tname); + } } }