From e3d2364c45bd8350e737faa6d0e2fbe2e583b03a Mon Sep 17 00:00:00 2001 From: Jeff King Date: Wed, 5 Jun 2024 04:35:26 -0400 Subject: [PATCH] imap-send: free all_msgs strbuf in "out" label 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 Signed-off-by: Junio C Hamano --- imap-send.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imap-send.c b/imap-send.c index e602edc4be..01404e5047 100644 --- a/imap-send.c +++ b/imap-send.c @@ -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 @@ int cmd_main(int argc, const char **argv) free(server.user); free(server.pass); free(server.auth_method); + strbuf_release(&all_msgs); return ret; }