From: Timo Sirainen Date: Sat, 16 Jun 2018 16:37:27 +0000 (+0300) Subject: imapc: Fix potential assert-crash when reconnecting during syncing X-Git-Tag: 2.3.3.rc1~250 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b352767f8a2dae9fe12c68f890a2d85ff7a5b28a;p=thirdparty%2Fdovecot%2Fcore.git imapc: Fix potential assert-crash when reconnecting during syncing 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 bc05122261..7b4a5c9f30 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -620,6 +620,7 @@ static void imapc_mailbox_reopen(void *context) mbox->sync_next_rseq = 1; } + mbox->state_fetched_success = FALSE; mbox->initial_sync_done = FALSE; mbox->selecting = TRUE; mbox->selected = FALSE; diff --git a/src/lib-storage/index/imapc/imapc-sync.c b/src/lib-storage/index/imapc/imapc-sync.c index 857271edee..5941d66c50 100644 --- a/src/lib-storage/index/imapc/imapc-sync.c +++ b/src/lib-storage/index/imapc/imapc-sync.c @@ -411,6 +411,12 @@ static void imapc_sync_index(struct imapc_sync_context *ctx) imapc_mailbox_run(mbox); array_free(&ctx->expunged_uids); + if (!mbox->state_fetched_success) { + /* All the sync commands succeeded, but we got disconnected. + imapc_initial_sync_check() will crash if we go there. */ + ctx->failed = TRUE; + } + /* add uidnext & highestmodseq after all appends */ imapc_sync_uid_next(ctx); imapc_sync_highestmodseq(ctx);