]> source.dussan.org Git - rspamd.git/commitdiff
Fix critical issue in adding fuzzy hashes
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 24 Nov 2015 14:44:26 +0000 (14:44 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 24 Nov 2015 14:44:26 +0000 (14:44 +0000)
src/libserver/fuzzy_backend.c
src/plugins/fuzzy_check.c

index 611d212c4016a1488519c82923dceb4f65fcc51e..3105fdf11ae179e16be66d8e3a96da5a62335c64 100644 (file)
@@ -607,47 +607,45 @@ rspamd_fuzzy_backend_add (struct rspamd_fuzzy_backend *backend,
                }
        }
        else {
-               if (rc == SQLITE_OK) {
-                       rc = rspamd_fuzzy_backend_run_stmt (backend, FALSE,
-                                       RSPAMD_FUZZY_BACKEND_INSERT,
-                                       (gint) cmd->flag,
-                                       cmd->digest,
-                                       (gint64) cmd->value,
-                                       (gint64) time (NULL));
+               rc = rspamd_fuzzy_backend_run_stmt (backend, FALSE,
+                               RSPAMD_FUZZY_BACKEND_INSERT,
+                               (gint) cmd->flag,
+                               cmd->digest,
+                               (gint64) cmd->value,
+                               (gint64) time (NULL));
 
-                       if (rc == SQLITE_OK) {
-                               if (cmd->shingles_count > 0) {
-                                       id = sqlite3_last_insert_rowid (backend->db);
-                                       shcmd = (const struct rspamd_fuzzy_shingle_cmd *) cmd;
-
-                                       for (i = 0; i < RSPAMD_SHINGLE_SIZE; i++) {
-                                               rc = rspamd_fuzzy_backend_run_stmt (backend, TRUE,
-                                                               RSPAMD_FUZZY_BACKEND_INSERT_SHINGLE,
-                                                               shcmd->sgl.hashes[i], i, id);
-                                               msg_debug_fuzzy_backend ("add shingle %d -> %L: %L",
-                                                               i,
+               if (rc == SQLITE_OK) {
+                       if (cmd->shingles_count > 0) {
+                               id = sqlite3_last_insert_rowid (backend->db);
+                               shcmd = (const struct rspamd_fuzzy_shingle_cmd *) cmd;
+
+                               for (i = 0; i < RSPAMD_SHINGLE_SIZE; i++) {
+                                       rc = rspamd_fuzzy_backend_run_stmt (backend, TRUE,
+                                                       RSPAMD_FUZZY_BACKEND_INSERT_SHINGLE,
+                                                       shcmd->sgl.hashes[i], i, id);
+                                       msg_debug_fuzzy_backend ("add shingle %d -> %L: %L",
+                                                       i,
+                                                       shcmd->sgl.hashes[i],
+                                                       id);
+
+                                       if (rc != SQLITE_OK) {
+                                               msg_warn_fuzzy_backend ("cannot add shingle %d -> "
+                                                               "%L: %L: %s", i,
                                                                shcmd->sgl.hashes[i],
-                                                               id);
-
-                                               if (rc != SQLITE_OK) {
-                                                       msg_warn_fuzzy_backend ("cannot add shingle %d -> "
-                                                                       "%L: %L: %s", i,
-                                                                       shcmd->sgl.hashes[i],
-                                                                       id, sqlite3_errmsg (backend->db));
-                                               }
+                                                               id, sqlite3_errmsg (backend->db));
                                        }
                                }
                        }
-                       else {
-                               msg_warn_fuzzy_backend ("cannot add hash to %d -> "
-                                               "%*xs: %s", (gint)cmd->flag,
-                                               (gint)sizeof (cmd->digest), cmd->digest,
-                                               sqlite3_errmsg (backend->db));
-                       }
-
-                       rspamd_fuzzy_backend_cleanup_stmt (backend,
-                                       RSPAMD_FUZZY_BACKEND_INSERT);
                }
+               else {
+                       msg_warn_fuzzy_backend ("cannot add hash to %d -> "
+                                       "%*xs: %s", (gint)cmd->flag,
+                                       (gint)sizeof (cmd->digest), cmd->digest,
+                                       sqlite3_errmsg (backend->db));
+               }
+
+               rspamd_fuzzy_backend_cleanup_stmt (backend,
+                               RSPAMD_FUZZY_BACKEND_INSERT);
        }
 
        if (rc == SQLITE_OK) {
index be1b556c83137b3c4f14914de66fb6fc62d098a2..cf58eb672221ea48da338029e8a942e1423d2538 100644 (file)
@@ -1110,10 +1110,11 @@ fuzzy_controller_io_callback (gint fd, short what, void *arg)
                                else {
                                        msg_info_task ("cannot process fuzzy hash for message "
                                                        "<%s>, "
-                                                       "list %s:%d",
+                                                       "list %s:%d, error: %d",
                                                        session->task->message_id,
                                                        symbol,
-                                                       rep->flag);
+                                                       rep->flag,
+                                                       rep->value);
                                        if (*(session->err) == NULL) {
                                                g_set_error (session->err,
                                                        g_quark_from_static_string ("fuzzy check"),