From: Timo Sirainen Date: Tue, 8 Dec 2015 08:17:10 +0000 (+0200) Subject: lmtp: Memory leak fixes on handling some RCPT TO failures. X-Git-Tag: 2.2.21~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=191a22ee13135fd752fcf03a43ef2f1b070937f5;p=thirdparty%2Fdovecot%2Fcore.git lmtp: Memory leak fixes on handling some RCPT TO failures. --- diff --git a/src/lmtp/commands.c b/src/lmtp/commands.c index aca1edd898..f36e076d91 100644 --- a/src/lmtp/commands.c +++ b/src/lmtp/commands.c @@ -686,6 +686,7 @@ int cmd_rcpt(struct client *client, const char *args) client_send_line(client, "451 4.3.0 <%s> " "Can't handle mixed proxy/non-proxy destinations", address); + mail_storage_service_user_free(&rcpt->service_user); return 0; } @@ -693,15 +694,16 @@ int cmd_rcpt(struct client *client, const char *args) rcpt->address = p_strdup(client->state_pool, address); rcpt->detail = p_strdup(client->state_pool, detail); - if ((ret = lmtp_rcpt_to_is_over_quota(client, rcpt)) < 0) { - client_send_line(client, ERRSTR_TEMP_MAILBOX_FAIL, - rcpt->address); + if ((ret = lmtp_rcpt_to_is_over_quota(client, rcpt)) != 0) { + if (ret < 0) { + client_send_line(client, ERRSTR_TEMP_MAILBOX_FAIL, + rcpt->address); + } + mail_storage_service_user_free(&rcpt->service_user); return 0; } - if (ret == 0) { - array_append(&client->state.rcpt_to, &rcpt, 1); - client_send_line(client, "250 2.1.5 OK"); - } + array_append(&client->state.rcpt_to, &rcpt, 1); + client_send_line(client, "250 2.1.5 OK"); if (client->lmtp_set->lmtp_user_concurrency_limit > 0) { const char *query = t_strconcat("LOOKUP\t",