]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Do not add exact hashes from different parts
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 27 May 2017 22:44:04 +0000 (23:44 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 27 May 2017 22:44:04 +0000 (23:44 +0100)
src/plugins/fuzzy_check.c

index ccca8eddc278f790dda1af8a7059a3c26c395690..a63201bd3105bccc82940f932d96cb0dbfd76a5e 100644 (file)
@@ -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);
+                               }
                        }
                }
        }