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.3.0.rc1~3029 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6b32b849af6e0aeb7106103b758757ffa69b2b71;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 bbb2cfff76..ea9bed03cb 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");