]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sparse-checkout: reuse --stdin buffer when reading patterns
authorJeff King <peff@peff.net>
Tue, 4 Jun 2024 10:13:25 +0000 (06:13 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 Jun 2024 16:51:42 +0000 (09:51 -0700)
When we read patterns from --stdin, we loop on strbuf_getline(), and
detach each line we read to pass into add_pattern(). This used to be
necessary because add_pattern() required that the pattern strings remain
valid while the pattern_list was in use. But it also created a leak,
since we didn't record the detached buffers anywhere else.

Now that add_pattern() has been modified to make its own copy of the
strings, we can stop detaching and fix the leak. This fixes 4 leaks
detected in t1091.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/sparse-checkout.c

index 923e6ecc0a1968a3a1ecd9d9b7ba2f54810e67eb..75c07d5bb42859e692723d4186866ca91fdcc321 100644 (file)
@@ -585,11 +585,10 @@ static void add_patterns_from_input(struct pattern_list *pl,
                if (file) {
                        struct strbuf line = STRBUF_INIT;
 
-                       while (!strbuf_getline(&line, file)) {
-                               size_t len;
-                               char *buf = strbuf_detach(&line, &len);
-                               add_pattern(buf, empty_base, 0, pl, 0);
-                       }
+                       while (!strbuf_getline(&line, file))
+                               add_pattern(line.buf, empty_base, 0, pl, 0);
+
+                       strbuf_release(&line);
                } else {
                        for (i = 0; i < argc; i++)
                                add_pattern(argv[i], empty_base, 0, pl, 0);