From: sergey.kitov Date: Tue, 13 Oct 2020 14:34:12 +0000 (+0300) Subject: lib-storage: Skip setting log view in mailbox_get_expunges_init when box->view is... X-Git-Tag: 2.3.13~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=17813e78b025bae7eac94816b656c5ce7fa4f151;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Skip setting log view in mailbox_get_expunges_init when box->view is outdated. 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) --- diff --git a/src/lib-storage/mailbox-get.c b/src/lib-storage/mailbox-get.c index 8c77e4ab68..8076e18560 100644 --- a/src/lib-storage/mailbox-get.c +++ b/src/lib-storage/mailbox-get.c @@ -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) {