]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Fix extensions processing in fuzzy worker
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Jul 2020 13:44:47 +0000 (14:44 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 8 Jul 2020 13:44:47 +0000 (14:44 +0100)
src/fuzzy_storage.c

index 0d7721ffbeed1062440c7a93eedcb34b0bc55203..f9c66945200a9640eda27575208c341555284751 100644 (file)
@@ -1118,12 +1118,12 @@ rspamd_fuzzy_command_valid (struct rspamd_fuzzy_cmd *cmd, gint r)
        switch (cmd->version) {
        case 4:
                if (cmd->shingles_count > 0) {
-                       if (r == sizeof (struct rspamd_fuzzy_shingle_cmd)) {
+                       if (r >= sizeof (struct rspamd_fuzzy_shingle_cmd)) {
                                ret = RSPAMD_FUZZY_EPOCH11;
                        }
                }
                else {
-                       if (r == sizeof (*cmd)) {
+                       if (r >= sizeof (*cmd)) {
                                ret = RSPAMD_FUZZY_EPOCH11;
                        }
                }
@@ -1223,7 +1223,7 @@ rspamd_fuzzy_decrypt_command (struct fuzzy_session *s, guchar *buf, gsize buflen
 static gboolean
 rspamd_fuzzy_extensions_from_wire (struct fuzzy_session *s, guchar *buf, gsize buflen)
 {
-       struct rspamd_fuzzy_cmd_extension *ext;
+       struct rspamd_fuzzy_cmd_extension *ext, *prev_ext;
        guchar *storage, *p = buf, *end = buf + buflen;
        gsize st_len = 0, n_ext = 0;
 
@@ -1295,6 +1295,7 @@ rspamd_fuzzy_extensions_from_wire (struct fuzzy_session *s, guchar *buf, gsize b
 
                /* All validation has been done, so we can just go further */
                while (p < end) {
+                       prev_ext = ext;
                        guchar cmd = *p++;
 
                        if (cmd == RSPAMD_FUZZY_EXT_SOURCE_DOMAIN) {
@@ -1338,7 +1339,7 @@ rspamd_fuzzy_extensions_from_wire (struct fuzzy_session *s, guchar *buf, gsize b
                }
 
                /* Last next should be NULL */
-               ext->next = NULL;
+               prev_ext->next = NULL;
 
                /* Rewind to the begin */
                ext = (struct rspamd_fuzzy_cmd_extension *)storage;