summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ågren <martin.agren@gmail.com>2017-08-27 09:37:32 +0200
committerJunio C Hamano <gitster@pobox.com>2017-09-06 13:11:14 +0900
commit150efef1e7252452fb5910adfb9b1e57270c3c15 (patch)
treed86efbf32312fed1ebafb97a309f0a7fae7d6eb4
parent7eeda8b8214bfd171f9ed1265ecc5bfa1d06c607 (diff)
downloadgit-ma/pkt-line-leakfix.tar.gz
pkt-line: re-'static'-ify buffer in packet_write_fmt_1()ma/pkt-line-leakfix
The static-ness was silently dropped in commit 70428d1a5 ("pkt-line: add packet_write_fmt_gently()", 2016-10-16). As a result, for each call to packet_write_fmt_1, we allocate and leak a buffer. We could keep the strbuf non-static and instead make sure we always release it before returning (but not before we die, so that we don't touch errno). That would also prepare us for threaded use. But until that needs to happen, let's just restore the static-ness so that we get back to a situation where we (eventually) do not continuosly keep allocating memory. Signed-off-by: Martin Ågren <martin.agren@gmail.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--pkt-line.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/pkt-line.c b/pkt-line.c
index d4b6bfe076..bfee02bbf6 100644
--- a/pkt-line.c
+++ b/pkt-line.c
@@ -136,9 +136,10 @@ static void format_packet(struct strbuf *out, const char *fmt, va_list args)
static int packet_write_fmt_1(int fd, int gently,
const char *fmt, va_list args)
{
- struct strbuf buf = STRBUF_INIT;
+ static struct strbuf buf = STRBUF_INIT;
ssize_t count;
+ strbuf_reset(&buf);
format_packet(&buf, fmt, args);
count = write_in_full(fd, buf.buf, buf.len);
if (count == buf.len)