]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Treat utf especially
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 19 Dec 2016 17:07:32 +0000 (17:07 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 19 Dec 2016 17:07:32 +0000 (17:07 +0000)
src/libmime/mime_encoding.c
src/libmime/mime_encoding.h
src/libmime/mime_headers.c
src/libmime/mime_headers.h

index 47b490b7371b64cd94dbb8fe709a97f438ab10a0..b33312fafce7ada74826c0faf5710d4f89753f06 100644 (file)
@@ -18,6 +18,7 @@
 #include "libutil/mem_pool.h"
 #include "libutil/regexp.h"
 #include "libserver/task.h"
+#include "mime_encoding.h"
 #include "message.h"
 #include <iconv.h>
 
@@ -209,6 +210,16 @@ rspamd_mime_to_utf8_byte_array (GByteArray *in,
        gsize outlen, pos;
        iconv_t ic;
        gsize remain, ret, inremain = in->len;
+       rspamd_ftok_t charset_tok;
+
+       RSPAMD_FTOK_FROM_STR (&charset_tok, enc);
+
+       if (rspamd_mime_charset_utf_check (&charset_tok, (gchar *)in->data, in->len)) {
+               g_byte_array_set_size (out, in->len);
+               memcpy (out->data, in->data, out->len);
+
+               return TRUE;
+       }
 
        ic = iconv_open (UTF8_CHARSET, enc);
 
@@ -264,7 +275,8 @@ rspamd_mime_to_utf8_byte_array (GByteArray *in,
 }
 
 gboolean
-rspamd_mime_charset_utf_check (rspamd_ftok_t *charset, gchar *in, gsize len)
+rspamd_mime_charset_utf_check (rspamd_ftok_t *charset,
+               gchar *in, gsize len)
 {
        const gchar *end, *p;
        gsize remain = len;
index eb3a599423f389428ea4f14c4e5cd41a632cccec..a4999266f6f55d4ce7856e2c2d2e64509767d7f4 100644 (file)
@@ -29,8 +29,8 @@ struct rspamd_mime_text_part;
  * @param in
  * @return
  */
-const gchar * rspamd_mime_detect_charset (rspamd_mempool_t *pool,
-               const rspamd_ftok_t *in);
+const gchar * rspamd_mime_detect_charset (const rspamd_ftok_t *in,
+               rspamd_mempool_t *pool);
 
 /**
  * Convert text chunk to utf-8. Input encoding is substituted using
index 68d0cb406cf3186290a7bfacfea1fa065458d441..9d36abf888426b930fc8e52f34bd95611fe3fc6c 100644 (file)
@@ -331,7 +331,7 @@ rspamd_mime_header_maybe_save_token (rspamd_mempool_t *pool, GString *out,
 
        /* We need to flush and decode old token to out string */
        if (rspamd_mime_to_utf8_byte_array (token, decoded_token,
-                       rspamd_mime_detect_charset (pool, new_charset))) {
+                       rspamd_mime_detect_charset (new_charset, pool))) {
                g_string_append_len (out, decoded_token->data, decoded_token->len);
        }
 
@@ -341,7 +341,7 @@ rspamd_mime_header_maybe_save_token (rspamd_mempool_t *pool, GString *out,
        memcpy (old_charset, new_charset, sizeof (*old_charset));
 }
 
-gchar *
+GString *
 rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
                gsize inlen)
 {
@@ -501,5 +501,5 @@ rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
                break;
        }
 
-       return g_string_free (out, FALSE);
+       return out;
 }
index f3ad54fb415428c022897f811c078f35c71a9408..b1a048fd898d755577673d21e98618371ef7f5e7 100644 (file)
@@ -55,7 +55,7 @@ void rspamd_mime_headers_process (struct rspamd_task *task, GHashTable *target,
  * @param inlen
  * @return
  */
-gchar *rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
+GString * rspamd_mime_header_decode (rspamd_mempool_t *pool, const gchar *in,
                gsize inlen);
 
 #endif /* SRC_LIBMIME_MIME_HEADERS_H_ */