diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-04-27 16:05:15 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-04-27 16:05:15 +0100 |
commit | 1ed9f282a568ef64372f687dba5ca25033b0ce2b (patch) | |
tree | af29263bf46da3c936cb1c9c0aa4743f9e736438 /src/libmime/message.c | |
parent | 781af3209968da2b8d7a4b1e38d4a1473c8a9852 (diff) | |
download | rspamd-1ed9f282a568ef64372f687dba5ca25033b0ce2b.tar.gz rspamd-1ed9f282a568ef64372f687dba5ca25033b0ce2b.zip |
[Fix] Fix and rescore R_PARTS_DIFFER logic
Signed-off-by: Vsevolod Stakhov <vsevolod@highsecure.ru>
Diffstat (limited to 'src/libmime/message.c')
-rw-r--r-- | src/libmime/message.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/libmime/message.c b/src/libmime/message.c index 2f3656eb8..14dd24a7f 100644 --- a/src/libmime/message.c +++ b/src/libmime/message.c @@ -1574,8 +1574,9 @@ rspamd_message_parse (struct rspamd_task *task) const gchar *p; gsize len; goffset hdr_pos; - gint diff, *pdiff, i; - guint tw, dw; + gint i; + gdouble diff, *pdiff; + guint tw, *ptw, dw; if (RSPAMD_TASK_IS_EMPTY (task)) { /* Don't do anything with empty task */ @@ -1847,26 +1848,34 @@ rspamd_message_parse (struct rspamd_task *task) if (!IS_PART_EMPTY (p1) && !IS_PART_EMPTY (p2) && p1->normalized_words && p2->normalized_words) { - tw = MAX (p1->normalized_words->len, p2->normalized_words->len); + tw = p1->normalized_words->len + p2->normalized_words->len; if (tw > 0) { dw = rspamd_words_levenshtein_distance (task, p1->normalized_words, p2->normalized_words); - diff = (100.0 * (gdouble)(tw - dw) / (gdouble)tw); + diff = (2.0 * (gdouble)dw) / (gdouble)tw; - debug_task ( + msg_err_task ( "different words: %d, total words: %d, " - "got likeliness between parts of %d%%", + "got diff between parts of %.2f", dw, tw, diff); - pdiff = rspamd_mempool_alloc (task->task_pool, sizeof (gint)); + pdiff = rspamd_mempool_alloc (task->task_pool, + sizeof (gdouble)); *pdiff = diff; rspamd_mempool_set_variable (task->task_pool, "parts_distance", pdiff, NULL); + ptw = rspamd_mempool_alloc (task->task_pool, + sizeof (gint)); + *ptw = tw; + rspamd_mempool_set_variable (task->task_pool, + "total_words", + ptw, + NULL); } } } |