From: Aki Tuomi Date: Thu, 6 Jul 2017 09:40:33 +0000 (+0300) Subject: virtual: If virtual_uid is not assigned skip it X-Git-Tag: 2.3.0.rc1~1293 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=781a9337941148bf1fb69bc55b205ab27fd08af0;p=thirdparty%2Fdovecot%2Fcore.git virtual: If virtual_uid is not assigned skip it We cannot lookup mails with uid 0, so if we see that mail has virtual uid 0, do not attempt to look it up from index, but skip it. Fixes Panic: file mail-index-map.c: line 549 (mail_index_map_lookup_seq_range): assertion failed: (first_uid > 0) --- diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index 8db401265e..aee794b177 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -567,6 +567,10 @@ virtual_sync_mailbox_box_remove(struct virtual_sync_context *ctx, for (; uid <= uids[i].seq2; uid++, src++) { i_assert(src < rec_count); i_assert(uidmap[src].real_uid == uid); + if (uidmap[src].virtual_uid == 0) { + /* has not been assigned yet */ + continue; + } if (mail_index_lookup_seq(ctx->sync_view, uidmap[src].virtual_uid, &vseq)) @@ -1040,6 +1044,10 @@ static int virtual_sync_backend_box_sync(struct virtual_sync_context *ctx, uidmap = array_idx(&bbox->uids, 0); for (; idx1 <= idx2; idx1++) { vuid = uidmap[idx1].virtual_uid; + if (vuid == 0) { + /* has not been even assigned yet */ + continue; + } if (!mail_index_lookup_seq(ctx->sync_view, vuid, &vseq)) { /* expunged by another session,