From: Timo Sirainen Date: Mon, 23 Nov 2009 17:51:07 +0000 (-0500) Subject: fts-squat: Fixed searching multi-byte characters. X-Git-Tag: 2.0.beta1~92 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=951caee6b476beeb341deb3fafd420e7e3f8b9a3;p=thirdparty%2Fdovecot%2Fcore.git fts-squat: Fixed searching multi-byte characters. --HG-- branch : HEAD --- diff --git a/src/plugins/fts-squat/squat-trie.c b/src/plugins/fts-squat/squat-trie.c index dfef5583cf..984b660a28 100644 --- a/src/plugins/fts-squat/squat-trie.c +++ b/src/plugins/fts-squat/squat-trie.c @@ -1904,7 +1904,8 @@ squat_trie_lookup_partial(struct squat_trie_lookup_context *ctx, unsigned int char_idx, max_chars, i, j, bytelen; int ret; - max_chars = uni_utf8_strlen_n(data, size); + for (i = 0, max_chars = 0; i < size; max_chars++) + i += char_lengths[i]; i_assert(max_chars > 0); i = 0; char_idx = 0; @@ -1999,7 +2000,7 @@ squat_trie_lookup_real(struct squat_trie *trie, const char *str, search it in parts. */ if (i != start) { ret = squat_trie_lookup_partial(&ctx, data + start, - char_lengths, + char_lengths + start, i - start); searched = TRUE; } @@ -2025,7 +2026,7 @@ squat_trie_lookup_real(struct squat_trie *trie, const char *str, array_clear(maybe_uids); } else { ret = squat_trie_lookup_partial(&ctx, data + start, - char_lengths, + char_lengths + start, i - start); } } else if (str_bytelen > 0) { @@ -2033,7 +2034,7 @@ squat_trie_lookup_real(struct squat_trie *trie, const char *str, array_clear(definite_uids); if (i != start && ret >= 0) { ret = squat_trie_lookup_partial(&ctx, data + start, - char_lengths, + char_lengths + start, i - start); } else if (!searched) { /* string has only nonindexed chars,