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>
This commit is contained in:
parent
78d468f1a9
commit
f3af71c947
@ -711,6 +711,7 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
|
||||
int ret = -1;
|
||||
struct strbuf fingerprint_stdout = STRBUF_INIT;
|
||||
struct strbuf **fingerprint;
|
||||
char *fingerprint_ret;
|
||||
|
||||
/*
|
||||
* 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)
|
||||
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
|
||||
signing_key);
|
||||
|
||||
return strbuf_detach(fingerprint[1], NULL);
|
||||
fingerprint_ret = strbuf_detach(fingerprint[1], NULL);
|
||||
strbuf_list_free(fingerprint);
|
||||
strbuf_release(&fingerprint_stdout);
|
||||
return fingerprint_ret;
|
||||
}
|
||||
|
||||
/* Returns the first public key from an ssh-agent to use for signing */
|
||||
|
Loading…
Reference in New Issue
Block a user