]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] Fix rfc2047 tokenization
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 5 Apr 2017 20:02:09 +0000 (21:02 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 5 Apr 2017 20:02:09 +0000 (21:02 +0100)
src/libmime/mime_headers.c

index 5044fc013a66e26041fcddce648c3c34bf5543c5..b333fcdfefa878b288f50df288eaadb30ddcc3b6 100644 (file)
@@ -641,7 +641,7 @@ gchar *
 rspamd_mime_header_encode (const gchar *in, gsize len)
 {
        const gchar *p = in, *end = in + len;
-       gchar *out, encode_buf[80];
+       gchar *out, encode_buf[80 * sizeof (guint32)];
        GString *res;
        gboolean need_encoding = FALSE;
 
@@ -664,12 +664,14 @@ rspamd_mime_header_encode (const gchar *in, gsize len)
                gint r;
                const gchar *prev;
                /* Choose step: =?UTF-8?Q?<qp>?= should be less than 76 chars */
-               const guint step = (76 - 12) / 3 + 1;
+               guint step = (76 - 12) / 3 + 1;
 
                ulen = g_utf8_strlen (in, len);
                res = g_string_sized_new (len * 2 + 1);
                pos = 0;
                prev = in;
+               /* Adjust chunk size for unicode average length */
+               step *= 1.0 * ulen / (gdouble)len;
 
                while (pos < ulen) {
                        p = g_utf8_offset_to_pointer (in, pos);