changeset 13448:ea8f667ac6ef

mbox: Fixed fetching last message from compressed mboxes.
author Timo Sirainen <tss@iki.fi>
date Mon, 12 Sep 2011 14:27:46 +0300
parents 1a39f7648c9d
children f4899179ad4c
files src/lib-storage/index/mbox/mbox-mail.c
diffstat 1 files changed, 9 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/mbox/mbox-mail.c	Mon Sep 12 14:01:36 2011 +0300
+++ b/src/lib-storage/index/mbox/mbox-mail.c	Mon Sep 12 14:27:46 2011 +0300
@@ -259,15 +259,19 @@
 	if (!mail_index_lookup_seq(view, mail->mail.mail.uid, &seq))
 		i_panic("Message unexpectedly expunged from index");
 
-	if (seq == hdr->messages_count) {
+	if (seq < hdr->messages_count) {
+		if (mbox_file_lookup_offset(mbox, view, seq + 1,
+					    next_offset_r) <= 0)
+			ret = -1;
+	} else if (mail->mail.mail.box->input != NULL) {
+		/* opened the mailbox as input stream. we can't trust the
+		   sync_size, since it's wrong with compressed mailboxes */
+		ret = 0;
+	} else {
 		/* last message, use the synced mbox size */
 		trailer_size =
 			mbox->storage->storage.set->mail_save_crlf ? 2 : 1;
 		*next_offset_r = mbox->mbox_hdr.sync_size - trailer_size;
-	} else {
-		if (mbox_file_lookup_offset(mbox, view, seq + 1,
-					    next_offset_r) <= 0)
-			ret = -1;
 	}
 	mail_index_view_close(&view);
 	return ret;