gpg-interface: fix leak of strbufs in get_ssh_key_fingerprint()
We read stdout from gpg into a strbuf, then split it into a list of strbufs, pull out one element, and return it. But we don't free either the original stdout buffer, nor the list returned from strbuf_split(). This patch fixes both. Note that we have to detach the returned string from its strbuf before calling strbuf_list_free(), as that would otherwise throw it away. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Oct 18, 2021 at 13:15 UTC
f3af71c947cdf2e5acd16cacf50586b829a68f6e
1 file changed
+5
-1
gpg-interface.c
+5
-1
@@ -711,6 +711,7 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
711
int ret = -1;
712
struct strbuf fingerprint_stdout = STRBUF_INIT;
713
struct strbuf **fingerprint;
714
+ char *fingerprint_ret;
715
716
/*
717
* With SSH Signing this can contain a filename or a public key
@@ -737,7 +738,10 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
738
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
739
signing_key);
740
740
- return strbuf_detach(fingerprint[1], NULL);
741
+ fingerprint_ret = strbuf_detach(fingerprint[1], NULL);
742
+ strbuf_list_free(fingerprint);
743
+ strbuf_release(&fingerprint_stdout);
744
+ return fingerprint_ret;
745
}
746
747
/* Returns the first public key from an ssh-agent to use for signing */