From 2c0c7937ec6cf30e17e8e418939a8cba3cce7714 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 2 Apr 2015 14:09:59 +0100 Subject: [PATCH] Fix broken unicode sequences. --- src/libutil/util.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/libutil/util.c b/src/libutil/util.c index f64fe2401..259e242e3 100644 --- a/src/libutil/util.c +++ b/src/libutil/util.c @@ -735,7 +735,7 @@ void rspamd_str_lc_utf8 (gchar *str, guint size) { const gchar *s = str, *p; - gchar *d = str; + gchar *d = str, tst[6]; gint remain = size; gint r; gunichar uc; @@ -749,12 +749,24 @@ rspamd_str_lc_utf8 (gchar *str, guint size) break; } - r = g_unichar_to_utf8 (uc, d); - g_assert (remain >= r); + if (remain >= 6) { + r = g_unichar_to_utf8 (uc, d); + } + else { + /* We must be cautious here to avoid broken unicode being append */ + r = g_unichar_to_utf8 (uc, tst); + if (r > remain) { + break; + } + else { + memcpy (d, tst, r); + } + } remain -= r; s = p; d += r; } + *d = '\0'; } -- 2.39.5