]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add sanity check when trying to insert options
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 18 Nov 2019 09:34:17 +0000 (09:34 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 18 Nov 2019 09:34:17 +0000 (09:34 +0000)
src/lua/lua_task.c

index e59bd36859871b6e91e8b6377a10991383a8ee2b..0be4699fe7bf6675dd6a169b115fdfc15d757462 100644 (file)
@@ -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);
+                               }
                        }
                }