grep: stop leaking line strings with -f
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>
Mon, 21 May 2012 16:10:09 +0000 (18:10 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 21 May 2012 22:02:08 +0000 (15:02 -0700)
When reading patterns from a file, we pass the lines as allocated string
buffers to append_grep_pat() and never free them.  That's not a problem
because they are needed until the program ends anyway.

However, now that the function duplicates the pattern string, we can
reuse the strbuf after calling that function.  This simplifies the code
a bit and plugs a minor memory leak.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/grep.c

index 871afaa3c76ea34b67671a6e4a46957a08a946e5..f1392014f15f773021c479a01fb4ac76416d23df 100644 (file)
@@ -681,15 +681,12 @@ static int file_callback(const struct option *opt, const char *arg, int unset)
        if (!patterns)
                die_errno(_("cannot open '%s'"), arg);
        while (strbuf_getline(&sb, patterns, '\n') == 0) {
-               char *s;
-               size_t len;
-
                /* ignore empty line like grep does */
                if (sb.len == 0)
                        continue;
 
-               s = strbuf_detach(&sb, &len);
-               append_grep_pat(grep_opt, s, len, arg, ++lno, GREP_PATTERN);
+               append_grep_pat(grep_opt, sb.buf, sb.len, arg, ++lno,
+                               GREP_PATTERN);
        }
        if (!from_stdin)
                fclose(patterns);