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>
This commit is contained in:
parent
d649048e68
commit
c922b01f54
8
grep.c
8
grep.c
@ -54,6 +54,8 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
|
|||||||
struct grep_expr *x;
|
struct grep_expr *x;
|
||||||
|
|
||||||
p = *list;
|
p = *list;
|
||||||
|
if (!p)
|
||||||
|
return NULL;
|
||||||
switch (p->token) {
|
switch (p->token) {
|
||||||
case GREP_PATTERN: /* atom */
|
case GREP_PATTERN: /* atom */
|
||||||
case GREP_PATTERN_HEAD:
|
case GREP_PATTERN_HEAD:
|
||||||
@ -66,8 +68,6 @@ static struct grep_expr *compile_pattern_atom(struct grep_pat **list)
|
|||||||
case GREP_OPEN_PAREN:
|
case GREP_OPEN_PAREN:
|
||||||
*list = p->next;
|
*list = p->next;
|
||||||
x = compile_pattern_or(list);
|
x = compile_pattern_or(list);
|
||||||
if (!x)
|
|
||||||
return NULL;
|
|
||||||
if (!*list || (*list)->token != GREP_CLOSE_PAREN)
|
if (!*list || (*list)->token != GREP_CLOSE_PAREN)
|
||||||
die("unmatched parenthesis");
|
die("unmatched parenthesis");
|
||||||
*list = (*list)->next;
|
*list = (*list)->next;
|
||||||
@ -83,6 +83,8 @@ static struct grep_expr *compile_pattern_not(struct grep_pat **list)
|
|||||||
struct grep_expr *x;
|
struct grep_expr *x;
|
||||||
|
|
||||||
p = *list;
|
p = *list;
|
||||||
|
if (!p)
|
||||||
|
return NULL;
|
||||||
switch (p->token) {
|
switch (p->token) {
|
||||||
case GREP_NOT:
|
case GREP_NOT:
|
||||||
if (!p->next)
|
if (!p->next)
|
||||||
@ -361,6 +363,8 @@ static int match_expr_eval(struct grep_opt *o,
|
|||||||
{
|
{
|
||||||
int h = 0;
|
int h = 0;
|
||||||
|
|
||||||
|
if (!x)
|
||||||
|
die("Not a valid grep expression");
|
||||||
switch (x->node) {
|
switch (x->node) {
|
||||||
case GREP_NODE_ATOM:
|
case GREP_NODE_ATOM:
|
||||||
h = match_one_pattern(o, x->u.atom, bol, eol, ctx);
|
h = match_one_pattern(o, x->u.atom, bol, eol, ctx);
|
||||||
|
@ -26,6 +26,10 @@ test_expect_success setup '
|
|||||||
git commit -m initial
|
git commit -m initial
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'grep should not segfault with a bad input' '
|
||||||
|
test_must_fail git grep "("
|
||||||
|
'
|
||||||
|
|
||||||
for H in HEAD ''
|
for H in HEAD ''
|
||||||
do
|
do
|
||||||
case "$H" in
|
case "$H" in
|
||||||
|
Loading…
Reference in New Issue
Block a user