]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix parsing of messages with no content type
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 24 Dec 2016 10:58:17 +0000 (10:58 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 24 Dec 2016 10:58:17 +0000 (10:58 +0000)
Issue: #1283
Reported by: @moisseev

src/libmime/mime_parser.c

index a78c9d07246860aa6e112a927f5878c63fc6e99a..c501b99ec6ccf051949bde0c1497df7926cb9376 100644 (file)
@@ -861,31 +861,32 @@ rspamd_mime_parse_message (struct rspamd_task *task,
        npart->parent_part = part;
 
        if (hdrs == NULL) {
-               g_set_error (err, RSPAMD_MIME_QUARK, EINVAL,
-                               "Content type header is absent");
-
-               return FALSE;
+               sel = NULL;
        }
+       else {
 
-       for (i = 0; i < hdrs->len; i ++) {
-               hdr = g_ptr_array_index (hdrs, i);
-               ct = rspamd_content_type_parse (hdr->value, strlen (hdr->value),
-                               task->task_pool);
+               for (i = 0; i < hdrs->len; i ++) {
+                       hdr = g_ptr_array_index (hdrs, i);
+                       ct = rspamd_content_type_parse (hdr->value, strlen (hdr->value),
+                                       task->task_pool);
 
-               /* Here we prefer multipart content-type or any content-type */
-               if (ct) {
-                       if (sel == NULL) {
-                               sel = ct;
-                       }
-                       else if (ct->flags & RSPAMD_CONTENT_TYPE_MULTIPART) {
-                               sel = ct;
+                       /* Here we prefer multipart content-type or any content-type */
+                       if (ct) {
+                               if (sel == NULL) {
+                                       sel = ct;
+                               }
+                               else if (ct->flags & RSPAMD_CONTENT_TYPE_MULTIPART) {
+                                       sel = ct;
+                               }
                        }
                }
        }
 
        if (sel == NULL) {
                /* For messages we automatically assume plaintext */
+               msg_info_task ("cannot find content-type for a message, assume text/plain");
                sel = rspamd_mempool_alloc0 (task->task_pool, sizeof (*sel));
+               sel->flags = RSPAMD_CONTENT_TYPE_TEXT|RSPAMD_CONTENT_TYPE_BROKEN;
                RSPAMD_FTOK_ASSIGN (&sel->type, "text");
                RSPAMD_FTOK_ASSIGN (&sel->subtype, "plain");
        }