]> 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)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 15 Sep 2016 05:58:58 +0000 (08:58 +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 239c6a6c46d916a32aac4ff3153693d5397ff39a..643d0fc8e4b8a32ab895139277da964a2bde7d35 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");