From: Karl Fleischmann Date: Wed, 22 Mar 2023 07:57:25 +0000 (+0100) Subject: imap-login: Prevent memory leak if ID command gets disconnected before finishing X-Git-Tag: 2.4.0~2836 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef9e2b21bf6480a20228bccf2a6c9d4505fd3885;p=thirdparty%2Fdovecot%2Fcore.git imap-login: Prevent memory leak if ID command gets disconnected before finishing --- diff --git a/src/imap-login/imap-login-client.c b/src/imap-login/imap-login-client.c index 38794e0821..b894713f12 100644 --- a/src/imap-login/imap-login-client.c +++ b/src/imap-login/imap-login-client.c @@ -390,6 +390,13 @@ static void imap_client_destroy(struct client *client) { struct imap_client *imap_client = (struct imap_client *)client; + /* Prevent memory leak of ID command if client got disconnected before + command was finished. */ + if (imap_client->cmd_id != NULL) { + i_assert(!imap_client->cmd_finished); + cmd_id_free(imap_client); + } + i_free_and_null(imap_client->proxy_backend_capability); imap_parser_unref(&imap_client->parser); } diff --git a/src/imap-login/imap-login-client.h b/src/imap-login/imap-login-client.h index 002829ba3a..6259ec5d8d 100644 --- a/src/imap-login/imap-login-client.h +++ b/src/imap-login/imap-login-client.h @@ -93,5 +93,6 @@ bool client_handle_parser_error(struct imap_client *client, struct imap_parser *parser); int cmd_id(struct imap_client *client); +void cmd_id_free(struct imap_client *client); #endif diff --git a/src/imap-login/imap-login-cmd-id.c b/src/imap-login/imap-login-cmd-id.c index 57d635b9a7..e2d050d6a9 100644 --- a/src/imap-login/imap-login-cmd-id.c +++ b/src/imap-login/imap-login-cmd-id.c @@ -229,7 +229,7 @@ static void cmd_id_finish(struct imap_client *client) client_send_reply(&client->common, IMAP_CMD_REPLY_OK, msg); } -static void cmd_id_free(struct imap_client *client) +void cmd_id_free(struct imap_client *client) { struct imap_client_cmd_id *id = client->cmd_id;