changeset 18880:d609454bdf64

virtual: virtual_uids weren't always set to all mails, causing missing mails and crashes in search.
author Timo Sirainen <tss@iki.fi>
date Wed, 17 Jun 2015 14:25:48 +0300
parents ac8fc3db0ef6
children 7f7b77feb9ce
files src/plugins/virtual/virtual-sync.c
diffstat 1 files changed, 7 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-sync.c	Wed Jun 17 14:24:06 2015 +0300
+++ b/src/plugins/virtual/virtual-sync.c	Wed Jun 17 14:25:48 2015 +0300
@@ -1228,8 +1228,6 @@
 
 		if (bbox == NULL || bbox->mailbox_id != vrec->mailbox_id) {
 			/* add the rest of the newly seen messages */
-			i_assert(j == uidmap_count ||
-				 bbox->search_result != NULL);
 			for (; j < uidmap_count; j++) {
 				add_rec.rec.real_uid = uidmap[j].real_uid;
 				array_append(&ctx->all_adds, &add_rec, 1);
@@ -1247,11 +1245,6 @@
 			add_rec.rec.mailbox_id = bbox->mailbox_id;
 			bbox->sync_seen = TRUE;
 		}
-		if (bbox->search_result == NULL) {
-			/* mailbox is completely unchanged since last sync */
-			j = uidmap_count;
-			continue;
-		}
 		mail_index_lookup_uid(ctx->sync_view, vseq, &vuid);
 
 		/* if virtual record doesn't exist in uidmap, it's expunged */
@@ -1268,8 +1261,13 @@
 		else {
 			/* exists - update uidmap and flags */
 			uidmap[j++].virtual_uid = vuid;
-			virtual_sync_external_flags(ctx, bbox, vseq,
-						    vrec->real_uid);
+			if (bbox->search_result == NULL) {
+				/* mailbox is completely unchanged since last
+				   sync - no need to sync flags */
+			} else {
+				virtual_sync_external_flags(ctx, bbox, vseq,
+							    vrec->real_uid);
+			}
 		}
 	}
 	i_free(vmails);