]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: imapc_transaction_save_rollback() - Fix NULL-check for ctx->src_mbox
authorMarkus Valentin <markus.valentin@open-xchange.com>
Tue, 1 Mar 2022 12:49:39 +0000 (13:49 +0100)
committerMarkus Valentin <markus.valentin@open-xchange.com>
Mon, 14 Mar 2022 13:06:49 +0000 (14:06 +0100)
Assert that unfinished context implies that ctx->src_mbox is non-NULL.
Also check for ctx->src_mbox being non-NULL before deinitializing it.

src/lib-storage/index/imapc/imapc-save.c

index 8e55d4347079f1da3be56aa7816dd43945dbf305..c50f46b390b56a7033b4c8a63aad0b419ecbf371 100644 (file)
@@ -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 */