]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
submission: submission-backend-relay - Fix segfault in QUIT command client-side destr...
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 14 Jan 2022 03:01:29 +0000 (04:01 +0100)
committerMartti Rannanjärvi <martti.rannanjarvi@open-xchange.com>
Fri, 21 Jan 2022 07:38:46 +0000 (09:38 +0200)
src/submission/submission-backend-relay.c

index cc8a6797f8884a3cdf6bde86d86f265fca154fe9..6d93b642571f57bd37120d239a81e9a3e4e86984 100644 (file)
@@ -958,6 +958,14 @@ relay_cmd_quit_destroy(struct smtp_server_cmd_ctx *cmd ATTR_UNUSED,
                smtp_client_command_abort(&quit_cmd->cmd_relayed);
 }
 
+static void relay_cmd_quit_relayed_destroy(void *context)
+{
+       struct relay_cmd_quit_context *quit_cmd = context;
+
+       i_assert(quit_cmd != NULL);
+       quit_cmd->cmd_relayed = NULL;
+}
+
 static void
 relay_cmd_quit_replied(struct smtp_server_cmd_ctx *cmd ATTR_UNUSED,
                       struct relay_cmd_quit_context *quit_cmd)
@@ -1010,6 +1018,9 @@ static void relay_cmd_quit_relay(struct relay_cmd_quit_context *quit_cmd)
                smtp_client_command_new(backend->conn, 0,
                                        relay_cmd_quit_callback, quit_cmd);
        smtp_client_command_write(quit_cmd->cmd_relayed, "QUIT");
+       smtp_client_command_set_abort_callback(
+               quit_cmd->cmd_relayed,
+               relay_cmd_quit_relayed_destroy, quit_cmd);
        smtp_client_command_submit(quit_cmd->cmd_relayed);
 }