Browse Source

[Minor] Add sanity check when trying to insert options

tags/2.2
Vsevolod Stakhov 4 years ago
parent
commit
5fe363b2ce
1 changed files with 26 additions and 5 deletions
  1. 26
    5
      src/lua/lua_task.c

+ 26
- 5
src/lua/lua_task.c View 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);
}
}
}


Loading…
Cancel
Save