]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Fix fold_after case to preserve multiple spaces
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Apr 2018 14:34:39 +0000 (15:34 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Apr 2018 14:34:39 +0000 (15:34 +0100)
src/libutil/str_util.c

index 29df7e744c8535276a8c01c374c4d8651449b3c4..5fe8774a6469a20d539e824b80cc4f4d5584b08e 100644 (file)
@@ -1028,9 +1028,23 @@ rspamd_header_value_fold (const gchar *name,
                case fold_token:
                        /* Here, we have token start at 'c' and token end at 'p' */
                        if (fold_type == fold_after) {
+                               guint nspaces = 0;
+                               const gchar *last;
 
                                if (p > c) {
                                        g_string_append_len (res, c, p - c);
+
+                                       /*
+                                        * Check any spaces that are appended to the result
+                                        * before folding
+                                        */
+                                       last = &res->str[res->len - 1];
+
+                                       while (g_ascii_isspace (*last)) {
+                                               last --;
+                                               nspaces ++;
+                                               res->len --;
+                                       }
                                }
 
                                switch (how) {
@@ -1051,6 +1065,12 @@ rspamd_header_value_fold (const gchar *name,
                                        p ++;
                                }
 
+                               /* Move leftover spaces */
+                               while (nspaces) {
+                                       g_string_append_c (res, ' ');
+                                       nspaces --;
+                               }
+
                                cur_len = 0;
                        }
                        else {