From: Vsevolod Stakhov Date: Tue, 22 Sep 2020 11:32:38 +0000 (+0100) Subject: [Minor] Add method to remove symbol from a scan result X-Git-Tag: 2.6~30 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c5e6bbff4a6efe44806d1c22beb9654d1d19776b;p=rspamd.git [Minor] Add method to remove symbol from a scan result --- diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c index d987cbff2..7b92510ca 100644 --- a/src/libmime/scan_result.c +++ b/src/libmime/scan_result.c @@ -354,7 +354,8 @@ insert_metric_result (struct rspamd_task *task, diff = NAN; break; - } else if (gr_score) { + } + else if (gr_score) { *gr_score += cur_diff; if (cur_diff < diff) { @@ -890,6 +891,59 @@ rspamd_task_find_symbol_result (struct rspamd_task *task, const char *sym, return res; } +struct rspamd_symbol_result* rspamd_task_remove_symbol_result ( + struct rspamd_task *task, + const gchar *symbol, + struct rspamd_scan_result *result) +{ + struct rspamd_symbol_result *res = NULL; + khiter_t k; + + if (result == NULL) { + /* Use default result */ + result = task->result; + } + + k = kh_get (rspamd_symbols_hash, result->symbols, symbol); + + if (k != kh_end (result->symbols)) { + res = &kh_value (result->symbols, k); + + if (!isnan (res->score)) { + /* Remove score from the result */ + result->score -= res->score; + + /* Also check the group limit */ + if (result->sym_groups && res->sym) { + struct rspamd_symbol_group *gr; + gint i; + + PTR_ARRAY_FOREACH (res->sym->groups, i, gr) { + gdouble *gr_score; + + k = kh_get (rspamd_symbols_group_hash, + result->sym_groups, gr); + + if (k != kh_end (result->sym_groups)) { + gr_score = &kh_value (result->sym_groups, k); + + if (gr_score) { + *gr_score -= res->score; + } + } + } + } + } + + kh_del (rspamd_symbols_hash, result->symbols, k); + } + else { + return NULL; + } + + return res; +} + void rspamd_task_symbol_result_foreach (struct rspamd_task *task, struct rspamd_scan_result *result, GHFunc func, diff --git a/src/libmime/scan_result.h b/src/libmime/scan_result.h index 2f20e2c62..4d55a8e62 100644 --- a/src/libmime/scan_result.h +++ b/src/libmime/scan_result.h @@ -149,7 +149,17 @@ struct rspamd_symbol_result *rspamd_task_insert_result_full (struct rspamd_task #define rspamd_task_insert_result(task, symbol, flag, opts) \ rspamd_task_insert_result_full (task, symbol, flag, opts, RSPAMD_SYMBOL_INSERT_DEFAULT, NULL) - +/** + * Removes a symbol from a specific symbol result + * @param task + * @param symbol + * @param result + * @return + */ +struct rspamd_symbol_result* rspamd_task_remove_symbol_result ( + struct rspamd_task *task, + const gchar *symbol, + struct rspamd_scan_result *result); /** * Adds new option to symbol * @param task