From: Vsevolod Stakhov Date: Wed, 10 Sep 2014 13:07:44 +0000 (+0100) Subject: Fix serious issue with non-ascii characters in fuzzy. X-Git-Tag: 0.7.0~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0438950996eab6a879b7b6eafdd374f9f2cc9614;p=thirdparty%2Frspamd.git Fix serious issue with non-ascii characters in fuzzy. --- diff --git a/src/libutil/fuzzy.c b/src/libutil/fuzzy.c index 3ba20bbad7..29a6a898c4 100644 --- a/src/libutil/fuzzy.c +++ b/src/libutil/fuzzy.c @@ -320,7 +320,7 @@ fuzzy_init_part (struct mime_text_part *part, gsize max_diff) { fuzzy_hash_t *new, *new2; - gchar *c, *end, *begin; + gchar *c, *end, *begin, *p; gsize real_len = 0, len = part->content->len; GList *cur_offset; struct process_exception *cur_ex = NULL; @@ -351,9 +351,13 @@ fuzzy_init_part (struct mime_text_part *part, else { uc = g_utf8_get_char (c); if (g_unichar_isalnum (uc)) { - real_len++; + p = g_utf8_next_char (c); + real_len += p - c; } - c = g_utf8_next_char (c); + else { + p = g_utf8_next_char (c); + } + c = p; } } } @@ -378,7 +382,7 @@ fuzzy_init_part (struct mime_text_part *part, write_diff = real_len > 0 && real_len < max_diff; if (write_diff) { - part->diff_str = fstralloc (pool, real_len); + part->diff_str = fstralloc (pool, real_len + 1); } else { part->diff_str = NULL;