diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-11-18 09:34:17 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-11-18 09:34:17 +0000 |
commit | 5fe363b2ce6705ae2878bf1df3067ef333be1d07 (patch) | |
tree | e8ea09c60a036ba2b307f44969e0786f70e76dca /src/lua | |
parent | 65909c1a82dc65733678393480d252349b3b6a1f (diff) | |
download | rspamd-5fe363b2ce6705ae2878bf1df3067ef333be1d07.tar.gz rspamd-5fe363b2ce6705ae2878bf1df3067ef333be1d07.zip |
[Minor] Add sanity check when trying to insert options
Diffstat (limited to 'src/lua')
-rw-r--r-- | src/lua/lua_task.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index e59bd3685..0be4699fe 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); + } } } |