From: Vsevolod Stakhov Date: Mon, 8 Apr 2024 18:21:20 +0000 (+0100) Subject: [Project] Adjust some final bits X-Git-Tag: 3.9.0~75^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fpull%2F4912%2Fhead;p=rspamd.git [Project] Adjust some final bits --- diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c index 5324d6082..09c3208cf 100644 --- a/src/libmime/scan_result.c +++ b/src/libmime/scan_result.c @@ -1088,20 +1088,21 @@ void rspamd_task_result_adjust_grow_factor(struct rspamd_task *task, double final_grow_factor = grow_factor; double max_limit = G_MINDOUBLE; - for (unsigned int i = 0; i < result->nactions; i++) { - struct rspamd_action_config *cur = &result->actions_config[i]; - - if (cur->cur_limit > 0 && max_limit < cur->cur_limit) { - max_limit = cur->cur_limit; - } - } - if (grow_factor > 1.0) { + for (unsigned int i = 0; i < result->nactions; i++) { + struct rspamd_action_config *cur = &result->actions_config[i]; + + if (cur->cur_limit > 0 && max_limit < cur->cur_limit) { + max_limit = cur->cur_limit; + } + } + /* Adjust factor by selecting all symbols and checking those with positive scores */ kh_foreach(result->symbols, kk, res, { if (res->score > 0) { double mult = 1.0 - grow_factor; + /* We adjust the factor by the ratio of the score to the max limit */ if (max_limit > 0 && !isnan(res->score)) { mult *= res->score / max_limit; final_grow_factor *= 1.0 + mult; @@ -1109,12 +1110,15 @@ void rspamd_task_result_adjust_grow_factor(struct rspamd_task *task, } }); - if (final_grow_factor > grow_factor) { + /* At this stage we know that we have some grow factor to apply */ + if (final_grow_factor > 1.0) { msg_info_task("calculated final grow factor for task: %.3f (%.2f the original one)", final_grow_factor, grow_factor); kh_foreach(result->symbols, kk, res, { if (res->score > 0) { + result->score -= res->score; res->score *= final_grow_factor; + result->score += res->score; } }); } diff --git a/src/libserver/task.c b/src/libserver/task.c index f81f34e47..270bb80ea 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -758,6 +758,10 @@ rspamd_task_process(struct rspamd_task *task, unsigned int stages) all_done = rspamd_symcache_process_symbols(task, task->cfg->cache, st); + if (all_done) { + rspamd_task_result_adjust_grow_factor(task, task->result, task->cfg->grow_factor); + } + if (all_done && (task->flags & RSPAMD_TASK_FLAG_LEARN_AUTO) && !RSPAMD_TASK_IS_EMPTY(task) && !(task->flags & (RSPAMD_TASK_FLAG_LEARN_SPAM | RSPAMD_TASK_FLAG_LEARN_HAM))) {