]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: client: Clear command callback early to prevent mishaps.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sat, 29 Sep 2018 13:31:14 +0000 (15:31 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 12 Feb 2019 13:40:48 +0000 (15:40 +0200)
src/lib-smtp/smtp-client-command.c

index 346502ed15c521e859b67ce1bd083b7f7abf13b8..546af8992b7b54156001f78d4aa54f2355060031 100644 (file)
@@ -211,6 +211,8 @@ void smtp_client_command_abort(struct smtp_client_command **_cmd)
 
        *_cmd = NULL;
 
+       smtp_client_command_drop_callback(cmd);
+
        if ((!disconnected && !cmd->plug && cmd->aborting) ||
                state >= SMTP_CLIENT_COMMAND_STATE_FINISHED)
                return;
@@ -223,7 +225,6 @@ void smtp_client_command_abort(struct smtp_client_command **_cmd)
                i_assert(state < SMTP_CLIENT_COMMAND_STATE_FINISHED);
                cmd->aborting = TRUE;
        }
-       cmd->callback = NULL;
        cmd->locked = FALSE;
 
        i_assert(!cmd->plug || state <= SMTP_CLIENT_COMMAND_STATE_SUBMITTED);
@@ -826,6 +827,7 @@ smtp_client_command_input_reply(struct smtp_client_command *cmd,
                cmd->callback(reply, cmd->context);
 
        if (finished) {
+               smtp_client_command_drop_callback(cmd);
                smtp_client_command_unref(&cmd);
                smtp_client_connection_trigger_output(conn);
        }