From 4273c57b658e8e6ead88ae545765b51c90fbe24e Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 16 Jun 2018 19:37:27 +0300 Subject: [PATCH] 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)) --- src/lib-storage/index/imapc/imapc-storage.c | 1 + src/lib-storage/index/imapc/imapc-sync.c | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/lib-storage/index/imapc/imapc-storage.c b/src/lib-storage/index/imapc/imapc-storage.c index d7b5ba185d..552c5d05ad 100644 --- a/src/lib-storage/index/imapc/imapc-storage.c +++ b/src/lib-storage/index/imapc/imapc-storage.c @@ -628,6 +628,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 626ffc10d6..1ac2c552ed 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);