sparse-checkout: reuse --stdin buffer when reading patterns

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>

Jeff King committed Jun 4, 2024 at 06:13 UTC c3324649ed5af972c9e91740b46a6e2a063050d4
1 file changed +4 -5
builtin/sparse-checkout.c
+4 -5
@@ -585,11 +585,10 @@ static void add_patterns_from_input(struct pattern_list *pl,
585 if (file) {
586 struct strbuf line = STRBUF_INIT;
587
588 - while (!strbuf_getline(&line, file)) {
589 - size_t len;
590 - char *buf = strbuf_detach(&line, &len);
591 - add_pattern(buf, empty_base, 0, pl, 0);
592 - }
588 + while (!strbuf_getline(&line, file))
589 + add_pattern(line.buf, empty_base, 0, pl, 0);
590 +
591 + strbuf_release(&line);
592 } else {
593 for (i = 0; i < argc; i++)
594 add_pattern(argv[i], empty_base, 0, pl, 0);