Skip to content

Commit a620046

Browse files
bk2204gitster
authored andcommitted
diff: don't crash with empty argument to -G or -S
The pickaxe options, -G and -S, need either a regex or a string to look through the history for. An empty value isn't very useful since it would either match everything or nothing, and what's worse, we presently crash with a BUG like so when the user provides one: BUG: diffcore-pickaxe.c:241: should have needle under -G or -S Since it's not very nice of us to crash and this wouldn't do anything useful anyway, let's simply inform the user that they must provide a non-empty argument and exit with an error if they provide an empty one instead. Reported-by: Jared Van Bortel <[email protected]> Signed-off-by: brian m. carlson <[email protected]> Acked-by: Elijah Newren <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f93ff17 commit a620046

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

diff.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5493,6 +5493,8 @@ static int diff_opt_pickaxe_regex(const struct option *opt,
54935493
BUG_ON_OPT_NEG(unset);
54945494
options->pickaxe = arg;
54955495
options->pickaxe_opts |= DIFF_PICKAXE_KIND_G;
5496+
if (arg && !*arg)
5497+
return error(_("-G requires a non-empty argument"));
54965498
return 0;
54975499
}
54985500

@@ -5504,6 +5506,8 @@ static int diff_opt_pickaxe_string(const struct option *opt,
55045506
BUG_ON_OPT_NEG(unset);
55055507
options->pickaxe = arg;
55065508
options->pickaxe_opts |= DIFF_PICKAXE_KIND_S;
5509+
if (arg && !*arg)
5510+
return error(_("-S requires a non-empty argument"));
55075511
return 0;
55085512
}
55095513

t/t4209-log-pickaxe.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,22 @@ test_expect_success 'usage: --no-pickaxe-regex' '
9393
test_cmp expect actual
9494
'
9595

96+
test_expect_success 'usage: -G and -S with empty argument' '
97+
cat >expect <<-\EOF &&
98+
error: -S requires a non-empty argument
99+
EOF
100+
101+
test_expect_code 129 git log -S "" 2>actual &&
102+
test_cmp expect actual &&
103+
104+
cat >expect <<-\EOF &&
105+
error: -G requires a non-empty argument
106+
EOF
107+
108+
test_expect_code 129 git log -G "" 2>actual &&
109+
test_cmp expect actual
110+
'
111+
96112
test_log expect_initial --grep initial
97113
test_log expect_nomatch --grep InItial
98114
test_log_icase expect_initial --grep InItial

0 commit comments

Comments
 (0)