From 6f94745813906563ffe2488e09cfcea63e3862b0 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 10 Sep 2016 11:28:38 +0300 Subject: [PATCH] lib-lda: Cleanup error handling in LMTP client code. If there are no successful recipients, we'll need to deinit the client. But at that point we've already called all the callbacks, so the line parameter to lmtp_client_fail_full() isn't actually used anywhere. This was confusing static analyzer because global_fail_string was used as parameter, which could have been NULL and wouldn't have been valid for the callbacks. --- src/lib-lda/lmtp-client.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib-lda/lmtp-client.c b/src/lib-lda/lmtp-client.c index 239c6a6c46..643d0fc8e4 100644 --- a/src/lib-lda/lmtp-client.c +++ b/src/lib-lda/lmtp-client.c @@ -274,10 +274,14 @@ static int lmtp_client_send_data_cmd(struct lmtp_client *client) if (client->rcpt_next_receive_idx < array_count(&client->recipients)) return 0; - if (client->global_fail_string != NULL || !client->rcpt_to_successes) { + if (client->global_fail_string != NULL) { lmtp_client_fail_full(client, client->global_fail_string, client->global_remote_failure); return -1; + } else if (!client->rcpt_to_successes) { + /* This error string shouldn't become visible anywhere */ + lmtp_client_fail_full(client, "No valid recipients", FALSE); + return -1; } else { client->input_state++; o_stream_nsend_str(client->output, "DATA\r\n");