From: Timo Sirainen Date: Sat, 16 Jun 2018 12:56:26 +0000 (+0300) Subject: imapc: Fix assert-crash when reconnecting during initial FETCH finds expunges X-Git-Tag: 2.3.3.rc1~251 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=56b939c191f8598fd10105117759ce541c8723e0;p=thirdparty%2Fdovecot%2Fcore.git imapc: Fix assert-crash when reconnecting during initial FETCH finds expunges The initial FETCH is automatically retried on failure, but the FETCH state wasn't reset during the reconnection. Fixes: Panic: file imapc-sync.c: line 328 (imapc_initial_sync_check): assertion failed: (mail_index_is_expunged(view, lseq) || seq_range_exists(&ctx->mbox->delayed_expunged_uids, luid)) --- diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index 5ba9ba3ba5..bc05122261 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -611,6 +611,14 @@ static void imapc_mailbox_reopen(void *context) i_assert(!mbox->initial_sync_done); return; } + if (!mbox->initial_sync_done) { + /* Initial FETCH 1:* didn't fully succeed. We're reconnecting + and lib-imap-client is automatically resending it. But we + need to reset the sync_next_* state so that if any of the + mails are now expunged we won't get confused and crash. */ + mbox->sync_next_lseq = 1; + mbox->sync_next_rseq = 1; + } mbox->initial_sync_done = FALSE; mbox->selecting = TRUE;