From 1e6a1fecc70b723109f9e7ec1b8da1acd744861c Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 29 Apr 2019 11:41:28 +0100 Subject: [PATCH] [Minor] Some fixes in least passthrough results processing --- src/libmime/filter.c | 40 ++++++++++++++++++++++++---------------- src/lua/lua_task.c | 13 ++++++++----- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/libmime/filter.c b/src/libmime/filter.c index c3f3089f8..a454cb8df 100644 --- a/src/libmime/filter.c +++ b/src/libmime/filter.c @@ -503,25 +503,33 @@ rspamd_check_action_metric (struct rspamd_task *task) gboolean seen_least = FALSE; if (mres->passthrough_result != NULL) { - /* Peek the highest priority result */ - pr = mres->passthrough_result; - sc = pr->target_score; - selected_action = pr->action; - - if (!(pr->flags & RSPAMD_PASSTHROUGH_LEAST)) { - if (!isnan (sc)) { - if (pr->action->action_type == METRIC_ACTION_NOACTION) { - mres->score = MIN (sc, mres->score); + DL_FOREACH (mres->passthrough_result, pr) { + if (!seen_least || !(pr->flags & RSPAMD_PASSTHROUGH_LEAST)) { + sc = pr->target_score; + selected_action = pr->action; + + if (!(pr->flags & RSPAMD_PASSTHROUGH_LEAST)) { + if (!isnan (sc)) { + if (pr->action->action_type == METRIC_ACTION_NOACTION) { + mres->score = MIN (sc, mres->score); + } + else { + mres->score = sc; + } + } + + return selected_action; } else { - mres->score = sc; + seen_least = true; + + if (isnan (sc)) { + sc = selected_action->threshold; + } + + max_score = sc; } } - - return selected_action; - } - else { - seen_least = true; } } /* We are not certain about the results during processing */ @@ -555,7 +563,7 @@ rspamd_check_action_metric (struct rspamd_task *task) if (selected_action) { if (seen_least) { - mres->score = MIN (sc, mres->score); + mres->score = MAX (max_score, mres->score); } return selected_action; diff --git a/src/lua/lua_task.c b/src/lua/lua_task.c index 6a4ae145d..6a6413e7f 100644 --- a/src/lua/lua_task.c +++ b/src/lua/lua_task.c @@ -1809,11 +1809,14 @@ lua_task_set_pre_result (lua_State * L) if (lua_type (L, 3) == LUA_TSTRING) { message = lua_tostring (L, 3); - /* Keep compatibility here :( */ - ucl_object_replace_key (task->messages, - ucl_object_fromstring_common (message, 0, UCL_STRING_RAW), - "smtp_message", 0, - false); + if (lua_type (L, 7) != LUA_TSTRING) { + /* Keep compatibility here :( */ + + ucl_object_replace_key (task->messages, + ucl_object_fromstring_common (message, 0, UCL_STRING_RAW), + "smtp_message", 0, + false); + } } else { message = "unknown reason"; -- 2.39.5