changeset 211:9ee27ef24ab8 HEAD

crashfix for searching from message body
author Timo Sirainen <tss@iki.fi>
date Tue, 10 Sep 2002 05:58:48 +0300
parents 78df368a395b
children 4327b1266604
files src/lib-storage/index/index-search.c
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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);