diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-02-24 15:04:33 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-02-24 15:04:33 +0000 |
commit | 6c6de2946b70a4f460533ded4233013a0b1b1557 (patch) | |
tree | 6300a208f03c7ef419b618c9b8db5a0170c7ae9f /src | |
parent | 13b128038a84c8a90bd17dd47d73c27b1b9d7e49 (diff) | |
download | rspamd-6c6de2946b70a4f460533ded4233013a0b1b1557.tar.gz rspamd-6c6de2946b70a4f460533ded4233013a0b1b1557.zip |
Rework lua errors reporting
Diffstat (limited to 'src')
-rw-r--r-- | src/lua/lua_task.c | 238 |
1 files changed, 139 insertions, 99 deletions
diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index e73de893d..3403adbf6 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -672,16 +672,21 @@ lua_task_process_message (lua_State *L) { struct rspamd_task *task = lua_check_task (L, 1); - if (task != NULL && task->msg.len > 0) { - if (rspamd_message_parse (task) == 0) { - lua_pushboolean (L, TRUE); + if (task != NULL) { + if (task->msg.len > 0) { + if (rspamd_message_parse (task) == 0) { + lua_pushboolean (L, TRUE); + } + else { + lua_pushboolean (L, FALSE); + } } else { - lua_pushboolean (L, FALSE); + lua_pushnil (L); } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -699,7 +704,7 @@ lua_task_get_cfg (lua_State *L) *pcfg = task->cfg; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -716,7 +721,7 @@ lua_task_set_cfg (lua_State *L) task->cfg = ud ? *((struct rspamd_config **)ud) : NULL; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -740,13 +745,18 @@ lua_task_get_message (lua_State * L) GMimeMessage **pmsg; struct rspamd_task *task = lua_check_task (L, 1); - if (task != NULL && task->message != NULL) { - pmsg = lua_newuserdata (L, sizeof (GMimeMessage *)); - rspamd_lua_setclass (L, "rspamd{message}", -1); - *pmsg = task->message; + if (task != NULL) { + if (task->message != NULL) { + pmsg = lua_newuserdata (L, sizeof (GMimeMessage *)); + rspamd_lua_setclass (L, "rspamd{message}", -1); + *pmsg = task->message; + } + else { + lua_pushnil (L); + } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; } @@ -763,8 +773,9 @@ lua_task_get_mempool (lua_State * L) *ppool = task->task_pool; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } + return 1; } @@ -780,7 +791,7 @@ lua_task_get_session (lua_State * L) *psession = task->s; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; } @@ -797,7 +808,7 @@ lua_task_get_ev_base (lua_State * L) *pbase = task->ev_base; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; } @@ -827,7 +838,7 @@ lua_task_insert_result (lua_State * L) rspamd_task_insert_result (task, symbol_name, flag, params); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -848,6 +859,7 @@ lua_task_set_pre_result (lua_State * L) else if (lua_type (L, 2) == LUA_TSTRING) { rspamd_action_from_str (lua_tostring (L, 2), &action); } + if (action < METRIC_ACTION_MAX && action >= METRIC_ACTION_REJECT) { /* We also need to set the default metric to that result */ mres = rspamd_create_metric_result (task, DEFAULT_METRIC); @@ -877,9 +889,12 @@ lua_task_set_pre_result (lua_State * L) RSPAMD_TASK_STAGE_CLASSIFIERS_PRE | RSPAMD_TASK_STAGE_CLASSIFIERS_POST); } + else { + return luaL_error (L, "invalid arguments"); + } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -922,11 +937,9 @@ lua_task_get_urls (lua_State * L) if (need_emails) { g_hash_table_foreach (task->emails, lua_tree_url_callback, &cb); } - - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -952,7 +965,7 @@ lua_task_has_urls (lua_State * L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } lua_pushboolean (L, ret); @@ -972,11 +985,9 @@ lua_task_get_content (lua_State * L) t->len = task->msg.len; t->start = task->msg.begin; t->own = FALSE; - - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -993,10 +1004,9 @@ lua_task_get_emails (lua_State * L) cb.i = 1; cb.L = L; g_hash_table_foreach (task->emails, lua_tree_url_callback, &cb); - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1020,11 +1030,9 @@ lua_task_get_text_parts (lua_State * L) /* Make it array */ lua_rawseti (L, -2, i + 1); } - - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1048,10 +1056,9 @@ lua_task_get_parts (lua_State * L) /* Make it array */ lua_rawseti (L, -2, i + 1); } - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1083,12 +1090,14 @@ lua_task_get_request_header (lua_State *L) return 1; } + else { + lua_pushnil (L); + } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } - lua_pushnil (L); return 1; } @@ -1141,7 +1150,7 @@ lua_task_set_request_header (lua_State *L) } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } @@ -1212,12 +1221,14 @@ rspamd_lua_push_header (lua_State * L, else { val = rh->value; } + if (val) { lua_pushstring (L, val); } else { lua_pushnil (L); } + return 1; } } @@ -1238,13 +1249,13 @@ lua_task_get_header_common (lua_State *L, gboolean full, gboolean raw) if (lua_gettop (L) == 3) { strong = lua_toboolean (L, 3); } - return rspamd_lua_push_header (L, task->raw_headers, name, strong, full, raw); + + return rspamd_lua_push_header (L, task->raw_headers, name, + strong, full, raw); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } - - return 1; } static gint @@ -1279,7 +1290,7 @@ lua_task_get_raw_headers (lua_State *L) t->own = FALSE; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } @@ -1321,7 +1332,7 @@ lua_task_get_received_headers (lua_State * L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1332,12 +1343,16 @@ lua_task_get_queue_id (lua_State *L) { struct rspamd_task *task = lua_check_task (L, 1); - if (task && task->queue_id != NULL && strcmp (task->queue_id, "undef") != 0) { - lua_pushstring (L, task->queue_id); - return 1; + if (task) { + if (task->queue_id != NULL && strcmp (task->queue_id, "undef") != 0) { + lua_pushstring (L, task->queue_id); + } + else { + lua_pushnil (L); + } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1355,7 +1370,7 @@ lua_task_get_resolver (lua_State *L) *presolver = task->resolver; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1370,7 +1385,7 @@ lua_task_inc_dns_req (lua_State *L) task->dns_requests++; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -1450,7 +1465,7 @@ lua_task_get_recipients (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1498,7 +1513,7 @@ lua_task_has_from (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } lua_pushboolean (L, ret); @@ -1539,7 +1554,7 @@ lua_task_has_recipients (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } lua_pushboolean (L, ret); @@ -1588,7 +1603,7 @@ lua_task_get_from (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1608,7 +1623,7 @@ lua_task_get_user (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1627,7 +1642,7 @@ lua_task_set_user (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -1642,7 +1657,7 @@ lua_task_get_from_ip (lua_State *L) rspamd_lua_ip_push (L, task->from_addr); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1657,7 +1672,7 @@ lua_task_set_from_ip (lua_State *L) if (!task || !ip_str) { lua_pushstring (L, "invalid parameters"); - lua_error (L); + return lua_error (L); } else { if (!rspamd_parse_inet_address (&addr, @@ -1695,7 +1710,7 @@ lua_task_get_client_ip (lua_State *L) rspamd_lua_ip_push (L, task->client_addr); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1711,9 +1726,12 @@ lua_task_get_helo (lua_State *L) lua_pushstring (L, (gchar *)task->helo); return 1; } + else { + lua_pushnil (L); + } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1732,7 +1750,7 @@ lua_task_set_helo (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -1760,11 +1778,13 @@ lua_task_get_hostname (lua_State *L) else { lua_pushstring (L, task->hostname); } - return 1; + } + else { + lua_pushnil (L); } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1784,7 +1804,7 @@ lua_task_set_hostname (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 0; @@ -1800,20 +1820,19 @@ lua_task_get_images (lua_State *L) if (task) { cur = task->images; - if (cur != NULL) { - lua_newtable (L); - while (cur) { - pimg = lua_newuserdata (L, sizeof (struct rspamd_image *)); - rspamd_lua_setclass (L, "rspamd{image}", -1); - *pimg = cur->data; - lua_rawseti (L, -2, i++); - cur = g_list_next (cur); - } - return 1; + + lua_newtable (L); + + while (cur) { + pimg = lua_newuserdata (L, sizeof (struct rspamd_image *)); + rspamd_lua_setclass (L, "rspamd{image}", -1); + *pimg = cur->data; + lua_rawseti (L, -2, i++); + cur = g_list_next (cur); } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -1912,12 +1931,13 @@ lua_task_get_symbol (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } if (!found) { lua_pushnil (L); } + return 1; } @@ -1941,7 +1961,7 @@ lua_task_has_symbol (lua_State *L) lua_pushboolean (L, found); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2041,6 +2061,7 @@ lua_task_get_date (lua_State *L) tim = 0.0; } } + if (type == DATE_CONNECT || type == DATE_MESSAGE) { lua_pushnumber (L, tim); } @@ -2055,7 +2076,7 @@ lua_task_get_date (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2066,11 +2087,16 @@ lua_task_get_message_id (lua_State *L) { struct rspamd_task *task = lua_check_task (L, 1); - if (task != NULL && task->message_id != NULL) { - lua_pushstring (L, task->message_id); + if (task != NULL) { + if (task->message_id != NULL) { + lua_pushstring (L, task->message_id); + } + else { + lua_pushnil (L); + } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2091,7 +2117,7 @@ lua_task_get_timeval (lua_State *L) lua_settable (L, -3); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2106,7 +2132,7 @@ lua_task_get_size (lua_State *L) lua_pushnumber (L, task->msg.len); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2168,6 +2194,9 @@ lua_task_set_flag (lua_State *L) msg_warn_task ("unknown flag requested: %s", flag); } } + else { + return luaL_error (L, "invalid arguments"); + } return 0; } @@ -2192,9 +2221,13 @@ lua_task_has_flag (lua_State *L) if (!found) { msg_warn_task ("unknown flag requested: %s", flag); - lua_pushboolean (L, 0); } } + else { + return luaL_error (L, "invalid arguments"); + } + + lua_pushboolean (L, found); return 1; } @@ -2206,9 +2239,9 @@ lua_task_get_flags (lua_State *L) gint idx = 1; guint flags, bit, i; - lua_newtable (L); - if (task) { + lua_newtable (L); + flags = task->flags; for (i = 0; i < sizeof (task->flags) * NBBY; i ++) { @@ -2254,6 +2287,9 @@ lua_task_get_flags (lua_State *L) } } } + else { + return luaL_error (L, "invalid arguments"); + } return 1; } @@ -2268,8 +2304,7 @@ lua_task_learn (lua_State *L) int ret = 1; if (task == NULL) { - lua_error (L); - return 0; + return luaL_error (L, "invalid arguments"); } is_spam = lua_toboolean(L, 2); @@ -2301,6 +2336,9 @@ lua_task_set_settings (lua_State *L) if (settings != NULL && task != NULL) { task->settings = settings; } + else { + return luaL_error (L, "invalid arguments"); + } return 0; } @@ -2383,7 +2421,7 @@ lua_task_process_regexp (lua_State *L) } } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } lua_pushnumber (L, ret); @@ -2416,13 +2454,12 @@ lua_task_get_metric_score (lua_State *L) else { lua_pushnil (L); } - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } - return 0; + return 1; } static gint @@ -2435,6 +2472,10 @@ lua_task_get_metric_action (lua_State *L) metric_name = luaL_checkstring (L, 2); + if (metric_name == NULL) { + metric_name = DEFAULT_METRIC; + } + if (task && metric_name) { if ((metric_res = g_hash_table_lookup (task->results, metric_name)) != NULL) { @@ -2446,13 +2487,12 @@ lua_task_get_metric_action (lua_State *L) else { lua_pushnil (L); } - return 1; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } - return 0; + return 1; } /* Image functions */ @@ -2465,7 +2505,7 @@ lua_image_get_width (lua_State *L) lua_pushnumber (L, img->width); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2480,7 +2520,7 @@ lua_image_get_height (lua_State *L) lua_pushnumber (L, img->height); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2495,7 +2535,7 @@ lua_image_get_type (lua_State *L) lua_pushstring (L, rspamd_image_type_str (img->type)); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2510,7 +2550,7 @@ lua_image_get_size (lua_State *L) lua_pushinteger (L, img->data->len); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2525,7 +2565,7 @@ lua_image_get_filename (lua_State *L) lua_pushstring (L, img->filename); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2542,7 +2582,7 @@ lua_text_len (lua_State *L) l = t->len; } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } lua_pushnumber (L, l); @@ -2559,7 +2599,7 @@ lua_text_str (lua_State *L) lua_pushlstring (L, t->start, t->len); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; @@ -2574,7 +2614,7 @@ lua_text_ptr (lua_State *L) lua_pushlightuserdata (L, (gpointer)t->start); } else { - luaL_error (L, "invalid arguments"); + return luaL_error (L, "invalid arguments"); } return 1; |