From: Markus Valentin Date: Tue, 1 Mar 2022 12:49:39 +0000 (+0100) Subject: imapc: imapc_transaction_save_rollback() - Fix NULL-check for ctx->src_mbox X-Git-Tag: 2.3.19~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4540884c46c856332f704f4799da1bfb860e2fd4;p=thirdparty%2Fdovecot%2Fcore.git imapc: imapc_transaction_save_rollback() - Fix NULL-check for ctx->src_mbox Assert that unfinished context implies that ctx->src_mbox is non-NULL. Also check for ctx->src_mbox being non-NULL before deinitializing it. --- diff --git a/src/lib-storage/index/imapc/imapc-save.c b/src/lib-storage/index/imapc/imapc-save.c index 8e55d43470..c50f46b390 100644 --- a/src/lib-storage/index/imapc/imapc-save.c +++ b/src/lib-storage/index/imapc/imapc-save.c @@ -519,14 +519,16 @@ void imapc_transaction_save_rollback(struct mail_save_context *_ctx) ctx->failed = TRUE; (void)imapc_transaction_save_commit_pre(_ctx); + i_assert(ctx->finished || ctx->src_mbox != NULL); /* Clean up the pending copy and the context attached to it */ - if (ctx->src_mbox->pending_copy_request != NULL) - seqset_builder_deinit(&ctx->src_mbox->pending_copy_request->uidset_builder); - - imapc_copy_bulk_ctx_deinit(ctx); - i_free(ctx->src_mbox->pending_copy_request); - - imapc_client_stop(ctx->src_mbox->storage->client->client); + if (ctx->src_mbox != NULL) { + if (ctx->src_mbox->pending_copy_request != NULL) { + seqset_builder_deinit(&ctx->src_mbox->pending_copy_request->uidset_builder); + i_free(ctx->src_mbox->pending_copy_request); + } + imapc_copy_bulk_ctx_deinit(ctx); + imapc_client_stop(ctx->src_mbox->storage->client->client); + } } /* Expunge all added messages from index */