зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
0a0c342568
Коммит
cfe370c647
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
--
|
||||
|
|
Загрузка…
Ссылка в новой задаче