diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2024-08-16 12:56:42 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2024-08-16 12:56:42 +0100 |
commit | 615e833c99abc42226838c23c6364e90a22469c1 (patch) | |
tree | 5de581ddf99f145b81d9c79c276b0ce2ac5ad677 | |
parent | 973beec4a62b941aa9d225eb48e095c41e484de3 (diff) | |
download | rspamd-vstakhov-another-grow-factor-fix.tar.gz rspamd-vstakhov-another-grow-factor-fix.zip |
[Rework] Another reiteration on the grow factorvstakhov-another-grow-factor-fix
-rw-r--r-- | src/libmime/scan_result.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c index 894ae4f9e..1fe78d9c4 100644 --- a/src/libmime/scan_result.c +++ b/src/libmime/scan_result.c @@ -1101,21 +1101,23 @@ void rspamd_task_result_adjust_grow_factor(struct rspamd_task *task, } /* Adjust factor by selecting all symbols and checking those with positive scores */ + float *scores = rspamd_mempool_alloc(task->task_pool, sizeof(float) * kh_size(result->symbols)); + gsize i = 0; + kh_foreach(result->symbols, kk, res, { - if (res->score > 0) { - double mult = grow_factor - 1.0; - /* 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; - } + if (res->score > 0 && !isnan(res->score)) { + scores[i++] = res->score / max_limit; } }); + float sc_adjustment = rspamd_sum_floats(scores, &i); + final_grow_factor = grow_factor * sc_adjustment; + + /* 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); + msg_info_task("calculated final grow factor for task: %.3f (%.2f the original one; %.2f max limit)", + final_grow_factor, grow_factor, max_limit); kh_foreach(result->symbols, kk, res, { if (res->score > 0) { result->score -= res->score; |