]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-lda: Cleanup error handling in LMTP client code.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 10 Sep 2016 08:28:38 +0000 (11:28 +0300)
committerGitLab <gitlab@git.dovecot.net>
Tue, 13 Sep 2016 14:51:25 +0000 (17:51 +0300)
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

index bbb2cfff76ca3d8fc437f070bf92aca3e5c96b7b..ea9bed03cbb2f8515aaf0b54925e6809b98af417 100644 (file)
@@ -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");