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:

committed by
Junio C Hamano

parent
78d468f1a9
commit
f3af71c947
@ -711,6 +711,7 @@ static char *get_ssh_key_fingerprint(const char *signing_key)
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
struct strbuf fingerprint_stdout = STRBUF_INIT;
|
struct strbuf fingerprint_stdout = STRBUF_INIT;
|
||||||
struct strbuf **fingerprint;
|
struct strbuf **fingerprint;
|
||||||
|
char *fingerprint_ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* With SSH Signing this can contain a filename or a public key
|
* 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'"),
|
die_errno(_("failed to get the ssh fingerprint for key '%s'"),
|
||||||
signing_key);
|
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 */
|
/* Returns the first public key from an ssh-agent to use for signing */
|
||||||
|
Reference in New Issue
Block a user