aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmime/message.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-04-27 16:05:15 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-04-27 16:05:15 +0100
commit1ed9f282a568ef64372f687dba5ca25033b0ce2b (patch)
treeaf29263bf46da3c936cb1c9c0aa4743f9e736438 /src/libmime/message.c
parent781af3209968da2b8d7a4b1e38d4a1473c8a9852 (diff)
downloadrspamd-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.c23
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);
}
}
}