Browse Source

grep: fix segfault when "git grep '('" is given

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Linus Torvalds 16 years ago committed by Junio C Hamano
parent
commit
c922b01f54
  1. 8
      grep.c
  2. 4
      t/t7002-grep.sh

8
grep.c

@ -54,6 +54,8 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list) @@ -54,6 +54,8 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
struct grep_expr *x;

p = *list;
if (!p)
return NULL;
switch (p->token) {
case GREP_PATTERN: /* atom */
case GREP_PATTERN_HEAD:
@ -66,8 +68,6 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list) @@ -66,8 +68,6 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
case GREP_OPEN_PAREN:
*list = p->next;
x = compile_pattern_or(list);
if (!x)
return NULL;
if (!*list || (*list)->token != GREP_CLOSE_PAREN)
die("unmatched parenthesis");
*list = (*list)->next;
@ -83,6 +83,8 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list) @@ -83,6 +83,8 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
struct grep_expr *x;

p = *list;
if (!p)
return NULL;
switch (p->token) {
case GREP_NOT:
if (!p->next)
@ -361,6 +363,8 @@ static int match_expr_eval(struct grep_opt *o, @@ -361,6 +363,8 @@ static int match_expr_eval(struct grep_opt *o,
{
int h = 0;

if (!x)
die("Not a valid grep expression");
switch (x->node) {
case GREP_NODE_ATOM:
h = match_one_pattern(o, x->u.atom, bol, eol, ctx);

4
t/t7002-grep.sh

@ -26,6 +26,10 @@ test_expect_success setup ' @@ -26,6 +26,10 @@ test_expect_success setup '
git commit -m initial
'

test_expect_success 'grep should not segfault with a bad input' '
test_must_fail git grep "("
'

for H in HEAD ''
do
case "$H" in

Loading…
Cancel
Save