]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Workaround for empty charset in rfc2231 encoding
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 26 Jul 2019 11:49:37 +0000 (12:49 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 26 Jul 2019 11:49:37 +0000 (12:49 +0100)
src/libmime/content_type.c

index 11fa8cd653bf31a8a267c3fc9662a7d45b5c7b43..ea48c0373da439f9d69c104f02520db50d645f3b 100644 (file)
@@ -48,12 +48,8 @@ rspamd_rfc2231_decode (rspamd_mempool_t *pool,
                ctok.begin = value_start;
                ctok.len = quote_pos - value_start;
 
-               charset = rspamd_mime_detect_charset (&ctok, pool);
-
-               if (charset == NULL) {
-                       msg_warn_pool ("cannot convert parameter from charset %T", &ctok);
-
-                       return FALSE;
+               if (ctok.len > 0) {
+                       charset = rspamd_mime_detect_charset (&ctok, pool);
                }
 
                /* Now, we can check for either next quote sign or, eh, ignore that */
@@ -71,6 +67,17 @@ rspamd_rfc2231_decode (rspamd_mempool_t *pool,
                                value_end - value_start);
                GError *err = NULL;
 
+               if (charset == NULL) {
+                       /* Try heuristic */
+                       charset = rspamd_mime_charset_find_by_content (value_start, r);
+               }
+
+               if (charset == NULL) {
+                       msg_warn_pool ("cannot convert parameter from charset %T", &ctok);
+
+                       return FALSE;
+               }
+
                param->value.begin = rspamd_mime_text_to_utf8 (pool,
                                value_start, r,
                                charset, &param->value.len, &err);