# HG changeset patch # User Timo Sirainen # Date 1031626728 -10800 # Node ID 9ee27ef24ab8b29a21a7a98b6b842effcf891764 # Parent 78df368a395bffcbb6efba3baf9d6eb14fd7691d crashfix for searching from message body diff -r 78df368a395b -r 9ee27ef24ab8 src/lib-storage/index/index-search.c --- a/src/lib-storage/index/index-search.c Tue Sep 10 05:52:09 2002 +0300 +++ b/src/lib-storage/index/index-search.c Tue Sep 10 05:58:48 2002 +0300 @@ -468,7 +468,7 @@ ARG_SET_RESULT(arg, -1); } -static void search_arg_match_data(IOBuffer *inbuf, unsigned int max_size, +static void search_arg_match_data(IOBuffer *inbuf, uoff_t max_size, MailSearchArg *args, MailSearchForeachFunc search_func) { @@ -481,8 +481,11 @@ /* do this in blocks: read data, compare it for all search words, skip for block size - (strlen(largest_searchword)-1) and continue. */ - while (max_size > 0 && - (ret = io_buffer_read_max(inbuf, max_size)) > 0) { + while (max_size > 0) { + size = max_size < SSIZE_T_MAX ? max_size : SSIZE_T_MAX; + if ((ret = io_buffer_read_max(inbuf, size)) < 0) + break; + ctx.msg = io_buffer_get_data(inbuf, &size); if (size > 0) { ctx.size = max_size < size ? max_size : size; @@ -543,7 +546,8 @@ io_buffer_skip(inbuf, rec->header_size); } - search_arg_match_data(inbuf, UINT_MAX, args, search_text_body); + search_arg_match_data(inbuf, rec->body_size, args, + search_text_body); /* set the rest as unmatched */ mail_search_args_foreach(args, search_text_set_unmatched, NULL);