From: Vsevolod Stakhov Date: Mon, 20 Mar 2017 18:24:19 +0000 (+0000) Subject: [Fix] Fix options and shots match X-Git-Tag: 1.5.4~72 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=64c930e180b11722c6905651fae65f85a52fb13e;p=thirdparty%2Frspamd.git [Fix] Fix options and shots match --- diff --git a/src/libmime/filter.c b/src/libmime/filter.c index 2a6bbae6d8..ed949a86a4 100644 --- a/src/libmime/filter.c +++ b/src/libmime/filter.c @@ -159,48 +159,57 @@ insert_metric_result (struct rspamd_task *task, single = TRUE; } - s->nshots ++; + /* Now check for the duplicate options */ + if (opt && s->options && g_hash_table_lookup (s->options, opt)) { + single = TRUE; + } + else { + s->nshots ++; + } + + if (!single) { + rspamd_task_add_result_option (task, s, opt); + } - if (rspamd_task_add_result_option (task, s, opt)) { - if (!single) { - diff = w; + /* Adjust diff */ + if (!single) { + diff = w; + } + else { + if (fabs (s->score) < fabs (w)) { + /* Replace less weight with a bigger one */ + diff = metric_res->score - s->score + w; } else { - if (fabs (s->score) < fabs (w)) { - /* Replace less weight with a bigger one */ - diff = metric_res->score - s->score + w; - } - else { - diff = 0; - } + diff = 0; } + } - if (diff) { - /* Handle grow factor */ - if (metric_res->grow_factor && diff > 0) { - diff *= metric_res->grow_factor; - next_gf *= metric->grow_factor; - } - else if (diff > 0) { - next_gf = metric->grow_factor; - } + if (diff) { + /* Handle grow factor */ + if (metric_res->grow_factor && diff > 0) { + diff *= metric_res->grow_factor; + next_gf *= metric->grow_factor; + } + else if (diff > 0) { + next_gf = metric->grow_factor; + } - diff = rspamd_check_group_score (task, symbol, gr, gr_score, diff); + diff = rspamd_check_group_score (task, symbol, gr, gr_score, diff); - if (!isnan (diff)) { - metric_res->score += diff; - metric_res->grow_factor = next_gf; + if (!isnan (diff)) { + metric_res->score += diff; + metric_res->grow_factor = next_gf; - if (gr_score) { - *gr_score += diff; - } + if (gr_score) { + *gr_score += diff; + } - if (single) { - s->score = w; - } - else { - s->score += diff; - } + if (single) { + s->score = w; + } + else { + s->score += diff; } } } diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index e83e9a699a..654035dabc 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -1499,7 +1499,7 @@ lua_config_set_metric_symbol (lua_State * L) "nshots=I", &name, &weight, &description, &group, &one_shot, &one_param, - &metric_name, &priority, &flags_str)) { + &metric_name, &priority, &flags_str, &nshots)) { msg_err_config ("bad arguments: %e", err); g_error_free (err);