]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Fix rfc2047 embedded into rfc2231 pieces in special headers
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 30 Mar 2021 19:30:28 +0000 (20:30 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 30 Mar 2021 19:30:28 +0000 (20:30 +0100)
src/libmime/content_type.c
src/libmime/mime_parser.c

index 84a93602f6a7622c174c5609f5f07900b6da648e..7c0ff3743ed94d30cb29d1d49a55a68a405329b3 100644 (file)
@@ -226,6 +226,16 @@ rspamd_postprocess_ct_attributes (rspamd_mempool_t *pool,
                        param->prev = param;
                }
 
+               gboolean invalid_utf = FALSE;
+
+               param->value.begin = rspamd_mime_header_decode (pool, param->value.begin,
+                               param->value.len, &invalid_utf);
+               param->value.len = strlen (param->value.begin);
+
+               if (invalid_utf) {
+                       param->flags |= RSPAMD_CONTENT_PARAM_BROKEN;
+               }
+
                proc (pool, param, procd);
        }
 }
@@ -269,7 +279,7 @@ rspamd_content_type_postprocess (rspamd_mempool_t *pool,
                RSPAMD_FTOK_ASSIGN (&srch, "name");
                if (!rspamd_ftok_icase_equal (&param->name, &srch)) {
                        /* Just lowercase */
-                       rspamd_str_lc ((gchar *) param->value.begin, param->value.len);
+                       rspamd_str_lc_utf8 ((gchar *) param->value.begin, param->value.len);
                }
        }
 }
index a89b76b3a5c1d7d9a899ab0df1aaf7156be9206b..0363d45140f9deea3a4445779c7e769aada9241b 100644 (file)
@@ -501,9 +501,9 @@ rspamd_mime_part_get_cd (struct rspamd_task *task, struct rspamd_mime_part *part
                        gsize hlen;
                        cd = NULL;
 
-                       if (cur->decoded) {
-                               hlen = strlen (cur->decoded);
-                               cd = rspamd_content_disposition_parse (cur->decoded, hlen,
+                       if (cur->value) {
+                               hlen = strlen (cur->value);
+                               cd = rspamd_content_disposition_parse (cur->value, hlen,
                                                task->task_pool);
                        }
 
@@ -887,7 +887,7 @@ rspamd_mime_process_multipart_node (struct rspamd_task *task,
        if (hdr != NULL) {
 
                DL_FOREACH (hdr, cur) {
-                       ct = rspamd_content_type_parse (cur->decoded, strlen (cur->decoded),
+                       ct = rspamd_content_type_parse (cur->value, strlen (cur->value),
                                        task->task_pool);
 
                        /* Here we prefer multipart content-type or any content-type */
@@ -1521,7 +1521,7 @@ rspamd_mime_parse_message (struct rspamd_task *task,
        }
        else {
                DL_FOREACH (hdr, cur) {
-                       ct = rspamd_content_type_parse (cur->decoded, strlen (cur->decoded),
+                       ct = rspamd_content_type_parse (cur->value, strlen (cur->value),
                                        task->task_pool);
 
                        /* Here we prefer multipart content-type or any content-type */