]> source.dussan.org Git - rspamd.git/commitdiff
Fix broken unicode sequences.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 2 Apr 2015 13:09:59 +0000 (14:09 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 2 Apr 2015 13:26:34 +0000 (14:26 +0100)
src/libutil/util.c

index f64fe24019fdebebd4b20b1bde7e08268190da2a..259e242e3d831dbc89bd7df64a1835e2753678c4 100644 (file)
@@ -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';
 }