From: Timo Sirainen Date: Sat, 10 Sep 2016 08:28:38 +0000 (+0300) Subject: lib-lda: Cleanup error handling in LMTP client code. X-Git-Tag: 2.2.26~261 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6f94745813906563ffe2488e09cfcea63e3862b0;p=thirdparty%2Fdovecot%2Fcore.git 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. --- 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");