From: Vsevolod Stakhov Date: Mon, 2 Apr 2018 14:34:39 +0000 (+0100) Subject: [Fix] Fix fold_after case to preserve multiple spaces X-Git-Tag: 1.7.3~53 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e12505a1471199f5d45f1799ce615ed06a87dc56;p=thirdparty%2Frspamd.git [Fix] Fix fold_after case to preserve multiple spaces --- diff --git a/src/libutil/str_util.c b/src/libutil/str_util.c index 29df7e744c..5fe8774a64 100644 --- a/src/libutil/str_util.c +++ b/src/libutil/str_util.c @@ -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 {