Browse Source

grep: do not segfault when -f is used

"git grep" would segfault if its -f option was used because it would
try to use an uninitialized strbuf, so initialize the strbuf.

Thanks to Johannes Sixt <j.sixt@viscovery.net> for the help with the
test cases.

Signed-off-by: Matt Kraai <kraai@ftbfs.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Matt Kraai 15 years ago committed by Junio C Hamano
parent
commit
cfe370c647
  1. 2
      builtin-grep.c
  2. 66
      t/t7002-grep.sh

2
builtin-grep.c

@ -599,7 +599,7 @@ static int file_callback(const struct option *opt, const char *arg, int unset) @@ -599,7 +599,7 @@ static int file_callback(const struct option *opt, const char *arg, int unset)
struct grep_opt *grep_opt = opt->value;
FILE *patterns;
int lno = 0;
struct strbuf sb;
struct strbuf sb = STRBUF_INIT;

patterns = fopen(arg, "r");
if (!patterns)

66
t/t7002-grep.sh

@ -164,6 +164,72 @@ test_expect_success 'grep -e A --and --not -e B' ' @@ -164,6 +164,72 @@ test_expect_success 'grep -e A --and --not -e B' '
test_cmp expected actual
'

test_expect_success 'grep -f, non-existent file' '
test_must_fail git grep -f patterns
'

cat >expected <<EOF
file:foo mmap bar
file:foo_mmap bar
file:foo_mmap bar mmap
file:foo mmap bar_mmap
file:foo_mmap bar mmap baz
EOF

cat >pattern <<EOF
mmap
EOF

test_expect_success 'grep -f, one pattern' '
git grep -f pattern >actual &&
test_cmp expected actual
'

cat >expected <<EOF
file:foo mmap bar
file:foo_mmap bar
file:foo_mmap bar mmap
file:foo mmap bar_mmap
file:foo_mmap bar mmap baz
t/a/v:vvv
t/v:vvv
v:vvv
EOF

cat >patterns <<EOF
mmap
vvv
EOF

test_expect_success 'grep -f, multiple patterns' '
git grep -f patterns >actual &&
test_cmp expected actual
'

cat >expected <<EOF
file:foo mmap bar
file:foo_mmap bar
file:foo_mmap bar mmap
file:foo mmap bar_mmap
file:foo_mmap bar mmap baz
t/a/v:vvv
t/v:vvv
v:vvv
EOF

cat >patterns <<EOF

mmap

vvv

EOF

test_expect_success 'grep -f, ignore empty lines' '
git grep -f patterns >actual &&
test_cmp expected actual
'

cat >expected <<EOF
y:y yy
--

Loading…
Cancel
Save