From d8ed8d5586542aa199bf343cebfe3327c9a472aa Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 8 Jun 2017 11:35:58 +0300 Subject: [PATCH] imapc: Fix potential crash if initial sync fails. Happened at least if mailbox had 0 mails and a failing mailbox_sync() was called twice. Fixes: Panic: file imapc-sync.c: line 477 (imapc_sync_index): assertion failed: (mbox->sync_fetch_first_uid == 1) --- src/lib-storage/index/imapc/imapc-sync.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib-storage/index/imapc/imapc-sync.c b/src/lib-storage/index/imapc/imapc-sync.c index 645e808624..957b80a498 100644 --- a/src/lib-storage/index/imapc/imapc-sync.c +++ b/src/lib-storage/index/imapc/imapc-sync.c @@ -483,7 +483,6 @@ static void imapc_sync_index(struct imapc_sync_context *ctx) adding new messages requires sync locking to avoid duplicates. */ imapc_sync_send_commands(ctx, mbox->sync_fetch_first_uid); - mbox->sync_fetch_first_uid = 0; } imapc_sync_expunge_finish(ctx); @@ -500,6 +499,10 @@ static void imapc_sync_index(struct imapc_sync_context *ctx) if (mbox->box.v.sync_notify != NULL) mbox->box.v.sync_notify(&mbox->box, 0, 0); + if (!ctx->failed) { + /* reset only after a successful sync */ + mbox->sync_fetch_first_uid = 0; + } if (!mbox->initial_sync_done && !ctx->failed) { imapc_initial_sync_check(ctx, FALSE); mbox->initial_sync_done = TRUE;