From 47b87877734ceea722d42ee9c92f727332e40a92 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 27 May 2017 23:44:04 +0100 Subject: [PATCH] [Fix] Do not add exact hashes from different parts --- src/plugins/fuzzy_check.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c index ccca8eddc..a63201bd3 100644 --- a/src/plugins/fuzzy_check.c +++ b/src/plugins/fuzzy_check.c @@ -2270,8 +2270,8 @@ fuzzy_generate_commands (struct rspamd_task *task, struct fuzzy_rule *rule, struct rspamd_mime_text_part *part; struct rspamd_mime_part *mime_part; struct rspamd_image *image; - struct fuzzy_cmd_io *io; - guint i; + struct fuzzy_cmd_io *io, *cur; + guint i, j; GPtrArray *res; res = g_ptr_array_sized_new (task->parts->len + 1); @@ -2319,8 +2319,21 @@ fuzzy_generate_commands (struct rspamd_task *task, struct fuzzy_rule *rule, io = fuzzy_cmd_from_text_part (rule, c, flag, value, task->task_pool, part); + if (io) { - g_ptr_array_add (res, io); + gboolean skip_existing = FALSE; + + PTR_ARRAY_FOREACH (res, j, cur) { + if (memcmp (cur->cmd.digest, io->cmd.digest, + sizeof (io->cmd.digest)) == 0) { + skip_existing = TRUE; + break; + } + } + + if (!skip_existing) { + g_ptr_array_add (res, io); + } } } } -- 2.39.5