]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Fix DKIM verification for empty DKIM signatures
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 24 Feb 2016 14:34:09 +0000 (14:34 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 24 Feb 2016 14:34:09 +0000 (14:34 +0000)
src/libserver/dkim.c
src/plugins/dkim_check.c

index f36299444b1136cbf96733a5b14cbad8d72cb6aa..2114065c31068da3226038671ce1f36d5168a022 100644 (file)
@@ -496,6 +496,14 @@ rspamd_create_dkim_context (const gchar *sig,
        }                                state, next_state;
 
 
+       if (sig == NULL) {
+               g_set_error (err,
+                               DKIM_ERROR,
+                               DKIM_SIGERROR_EMPTY_B,
+                               "empty signature");
+               return NULL;
+       }
+
        ctx = rspamd_mempool_alloc0 (pool, sizeof (rspamd_dkim_context_t));
        ctx->pool = pool;
        ctx->header_canon_type = DKIM_CANON_DEFAULT;
index 8147eb27002decbb6053e19a509f8ab36008201c..7852ddd6c79796223631a2c7a30282238fc36db7 100644 (file)
@@ -577,6 +577,13 @@ dkim_symbol_callback (struct rspamd_task *task, void *unused)
                        while (hlist != NULL) {
                                rh = (struct raw_header *)hlist->data;
 
+                               if (rh->decoded == NULL || rh->decoded[0] == '\0') {
+                                       msg_info_task ("<%s> cannot load empty DKIM context",
+                                                               task->message_id);
+                                       hlist = g_list_next (hlist);
+                                       continue;
+                               }
+
                                if (res == NULL) {
                                        res = rspamd_mempool_alloc0 (task->task_pool, sizeof (*res));
                                        res->prev = res;
@@ -599,8 +606,8 @@ dkim_symbol_callback (struct rspamd_task *task, void *unused)
                                                &err);
                                if (ctx == NULL) {
                                        if (err != NULL) {
-                                               msg_info_task ("<%s> cannot parse DKIM context: %s",
-                                                               task->message_id, err->message);
+                                               msg_info_task ("<%s> cannot parse DKIM context: %e",
+                                                               task->message_id, err);
                                                g_error_free (err);
                                                err = NULL;
                                        }