summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2014-01-01 22:03:30 -0500
committerJunio C Hamano <gitster@pobox.com>2014-01-02 10:21:40 -0800
commite1c1a324fc7061c8f170a113709724f1640addb3 (patch)
treea53813aaab6449201215bce82a8683b3aa0b0cf2
parentd2446dfd7f3b3f8948142cfb07a0270e2497d93f (diff)
downloadgit-jk/credential-plug-leak.tar.gz
Revert "prompt: clean up strbuf usage"jk/credential-plug-leak
This reverts commit 31b49d9b653803e7c7fd18b21c8bdd86e3421668. That commit taught do_askpass to hand ownership of our buffer back to the caller rather than simply return a pointer into our internal strbuf. What it failed to notice, though, was that our internal strbuf is static, because we are trying to emulate the getpass() interface. By handing off ownership, we created a memory leak that cannot be solved. Sometimes git_prompt returns a static buffer from getpass() (or our smarter git_terminal_prompt wrapper), and sometimes it returns an allocated string from do_askpass. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--prompt.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/prompt.c b/prompt.c
index d851807feb..d7bb17cb66 100644
--- a/prompt.c
+++ b/prompt.c
@@ -22,6 +22,7 @@ static char *do_askpass(const char *cmd, const char *prompt)
if (start_command(&pass))
return NULL;
+ strbuf_reset(&buffer);
if (strbuf_read(&buffer, pass.out, 20) < 0)
err = 1;
@@ -38,7 +39,7 @@ static char *do_askpass(const char *cmd, const char *prompt)
strbuf_setlen(&buffer, strcspn(buffer.buf, "\r\n"));
- return strbuf_detach(&buffer, NULL);
+ return buffer.buf;
}
char *git_prompt(const char *prompt, int flags)