]> git.ipfire.org Git - thirdparty/git.git/commitdiff
protocol-caps.c: fix memory leak in send_info()
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 31 Aug 2021 13:46:42 +0000 (15:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 31 Aug 2021 18:15:16 +0000 (11:15 -0700)
Fix a memory leak in a2ba162cda (object-info: support for retrieving
object info, 2021-04-20) which appears to have been based on a
misunderstanding of how the pkt-line.c API works. There is no need to
strdup() input to packet_writer_write(), it's just a printf()-like
format function.

This fixes a potentially large memory leak, since the number of OID
lines the "object-info" call can be arbitrarily large (or a small one
if the request is small).

This makes t5701-git-serve.sh pass again under SANITIZE=leak, as it
did before a2ba162cda2.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Acked-by: Bruno Albuquerque <bga@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
protocol-caps.c

index 13a9e63a04afba22065cbb260ee5ed57123bdc91..901b6795e42d055764146b44b37f611841e1ae4a 100644 (file)
@@ -69,9 +69,10 @@ static void send_info(struct repository *r, struct packet_writer *writer,
                        }
                }
 
-               packet_writer_write(writer, "%s",
-                                   strbuf_detach(&send_buffer, NULL));
+               packet_writer_write(writer, "%s", send_buffer.buf);
+               strbuf_reset(&send_buffer);
        }
+       strbuf_release(&send_buffer);
 }
 
 int cap_object_info(struct repository *r, struct strvec *keys,