]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: If virtual_uid is not assigned skip it
authorAki Tuomi <aki.tuomi@dovecot.fi>
Thu, 6 Jul 2017 09:40:33 +0000 (12:40 +0300)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 7 Jul 2017 06:59:54 +0000 (09:59 +0300)
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)

src/plugins/virtual/virtual-sync.c

index 8db401265e839b7634c0a5aad7ed63289360d1d1..aee794b177618d5d83d120b96ff70198a69ff529 100644 (file)
@@ -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,