Skip to content

Commit 91d3d7e

Browse files
committed
Merge branch 'ab/grep-simplify-extended-expression'
Giving "--invert-grep" and "--all-match" without "--grep" to the "git log" command resulted in an attempt to access grep pattern expression structure that has not been allocated, which has been corrected. * ab/grep-simplify-extended-expression: grep.c: remove "extended" in favor of "pattern_expression", fix segfault
2 parents 4a48c7d + db84376 commit 91d3d7e

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

grep.c

+7-8
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,7 @@ void compile_grep_patterns(struct grep_opt *opt)
708708
{
709709
struct grep_pat *p;
710710
struct grep_expr *header_expr = prep_header_patterns(opt);
711+
int extended = 0;
711712

712713
for (p = opt->pattern_list; p; p = p->next) {
713714
switch (p->token) {
@@ -717,14 +718,14 @@ void compile_grep_patterns(struct grep_opt *opt)
717718
compile_regexp(p, opt);
718719
break;
719720
default:
720-
opt->extended = 1;
721+
extended = 1;
721722
break;
722723
}
723724
}
724725

725726
if (opt->all_match || opt->no_body_match || header_expr)
726-
opt->extended = 1;
727-
else if (!opt->extended)
727+
extended = 1;
728+
else if (!extended)
728729
return;
729730

730731
p = opt->pattern_list;
@@ -790,7 +791,7 @@ void free_grep_patterns(struct grep_opt *opt)
790791
free(p);
791792
}
792793

793-
if (!opt->extended)
794+
if (!opt->pattern_expression)
794795
return;
795796
free_pattern_expr(opt->pattern_expression);
796797
}
@@ -971,8 +972,6 @@ static int match_expr_eval(struct grep_opt *opt, struct grep_expr *x,
971972
{
972973
int h = 0;
973974

974-
if (!x)
975-
die("Not a valid grep expression");
976975
switch (x->node) {
977976
case GREP_NODE_TRUE:
978977
h = 1;
@@ -1052,7 +1051,7 @@ static int match_line(struct grep_opt *opt,
10521051
struct grep_pat *p;
10531052
int hit = 0;
10541053

1055-
if (opt->extended)
1054+
if (opt->pattern_expression)
10561055
return match_expr(opt, bol, eol, ctx, col, icol,
10571056
collect_hits);
10581057

@@ -1370,7 +1369,7 @@ static int should_lookahead(struct grep_opt *opt)
13701369
{
13711370
struct grep_pat *p;
13721371

1373-
if (opt->extended)
1372+
if (opt->pattern_expression)
13741373
return 0; /* punt for too complex stuff */
13751374
if (opt->invert)
13761375
return 0;

grep.h

-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ struct grep_opt {
151151
#define GREP_BINARY_TEXT 2
152152
int binary;
153153
int allow_textconv;
154-
int extended;
155154
int use_reflog_filter;
156155
int relative;
157156
int pathname;

t/t4202-log.sh

+9
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,15 @@ test_expect_success 'log --grep' '
249249
test_cmp expect actual
250250
'
251251

252+
for noop_opt in --invert-grep --all-match
253+
do
254+
test_expect_success "log $noop_opt without --grep is a NOOP" '
255+
git log >expect &&
256+
git log $noop_opt >actual &&
257+
test_cmp expect actual
258+
'
259+
done
260+
252261
cat > expect << EOF
253262
second
254263
initial

0 commit comments

Comments
 (0)