]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Skip setting log view in mailbox_get_expunges_init when box->view is...
authorsergey.kitov <sergey.kitov@open-xchange.com>
Tue, 13 Oct 2020 14:34:12 +0000 (17:34 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Tue, 3 Nov 2020 16:45:40 +0000 (16:45 +0000)
This fixes assert-crash when IMAP client uses QRESYNC and lots of changes happen between syncing points.

Fixes:
Panic: file mail-transaction-log-view.c: line 144 (mail_transaction_log_view_set): assertion failed: (min_file_seq <= max_file_seq)

src/lib-storage/mailbox-get.c

index 8c77e4ab68f0f585bb18ad844fb60ffba2ea8e3c..8076e18560806a57760ecf9be865ca71264d5e7d 100644 (file)
@@ -97,12 +97,14 @@ mailbox_get_expunges_init(struct mailbox *box, uint64_t prev_modseq,
                                            &reset, &reason);
        if (ret == 0) {
                mail_transaction_log_get_tail(box->index->log, &tail_seq);
-               i_assert(tail_seq > log_seq);
-               ret = mail_transaction_log_view_set(log_view, tail_seq, 0,
-                                       box->view->log_file_head_seq,
-                                       box->view->log_file_head_offset,
-                                       &reset, &reason);
-               i_assert(ret != 0);
+               if (tail_seq <= box->view->log_file_head_seq) {
+                       i_assert(tail_seq > log_seq);
+                       ret = mail_transaction_log_view_set(log_view, tail_seq, 0,
+                                                           box->view->log_file_head_seq,
+                                                           box->view->log_file_head_offset,
+                                                           &reset, &reason);
+                       i_assert(ret != 0);
+               }
                *modseq_too_old_r = TRUE;
        }
        if (ret <= 0) {