Hello,
From: Kazuo Moriwaka moriwaka@valinux.co.jp Subject: Re: [Dovecot] Japanese Search Date: Tue, 21 Dec 2004 12:30:54 +0900 (JST)
I found a reason for imapd cannot search message body by japanese. charset_to_ucase_utf8_string() convert key to UTF-8 string, but context->charset keeps old value(ex. "iso-2022-jp").
When 2nd call of charset_to_ucase_utf8_string(), charset(iso-2022-jp) and key value (utf-8 encoded string) are mismatch. It causes: -> iconv returns error -> key isn't valid -> search failed.
I append some descriptions..
2 calls of charset_to_ucase_utf8_string() is caused by commands like following: a001 search charset ***** body "*****"
When imapd receive it, it calls message_body_search()
Call flow is look like:
message_body_search() +-> message_body_search_init() | +-> charset_to_ucase_utf8_string() <-- 1st (key is 'charset') +-> message_bodd_search_ctx() +-> message_search_header() +-> message_header_search_init() +-> charset_to_ucase_utf8_string() <-- 2nd (key is utf-8)
My last patch is just a quick hack to avoid this. I think search key's initialize (convert to utf8) is done in or near of index_storage_search_init() or imap_search().
thanks,
Kazuo Moriwaka moriwaka@valinux.co.jp