]> git.ipfire.org Git - thirdparty/git.git/commitdiff
imap-send: free all_msgs strbuf in "out" label
authorJeff King <peff@peff.net>
Wed, 5 Jun 2024 08:35:26 +0000 (04:35 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2024 17:32:53 +0000 (10:32 -0700)
We read stdin into a strbuf, but most code paths never release it,
causing a leak (albeit a minor one, as we leak only when exiting from
the main function of the program).

Commit 56f4f4a29d (imap-send: minimum leakfix, 2024-06-04) did the
minimum to plug the one instance we see in the test suite, when we read
an empty input. But it was sufficient only because aside from this noop
invocation, we don't test imap-send at all!

The right spot to free is in the "out" label, which is hit by all code
paths before leaving the function. We couldn't do that in 56f4f4a29d
because there was no unified exit path. That came separately in
3aca5f7fb0 (imap-send: fix leaking memory in `imap_server_conf`,
2024-06-04), which cleaned up many other leaks (but not this one).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
imap-send.c

index e602edc4be1deed95f144f883559178a18558db9..01404e5047c83167275a02c36836e730d3db8e20 100644 (file)
@@ -1555,7 +1555,6 @@ int cmd_main(int argc, const char **argv)
        }
 
        if (all_msgs.len == 0) {
-               strbuf_release(&all_msgs);
                fprintf(stderr, "nothing to send\n");
                ret = 1;
                goto out;
@@ -1586,5 +1585,6 @@ out:
        free(server.user);
        free(server.pass);
        free(server.auth_method);
+       strbuf_release(&all_msgs);
        return ret;
 }