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 <cebtenzzre@gmail.com> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Acked-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
f93ff170b9
commit
a620046b29
4
diff.c
4
diff.c
@ -5493,6 +5493,8 @@ static int diff_opt_pickaxe_regex(const struct option *opt,
|
||||
BUG_ON_OPT_NEG(unset);
|
||||
options->pickaxe = arg;
|
||||
options->pickaxe_opts |= DIFF_PICKAXE_KIND_G;
|
||||
if (arg && !*arg)
|
||||
return error(_("-G requires a non-empty argument"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5504,6 +5506,8 @@ static int diff_opt_pickaxe_string(const struct option *opt,
|
||||
BUG_ON_OPT_NEG(unset);
|
||||
options->pickaxe = arg;
|
||||
options->pickaxe_opts |= DIFF_PICKAXE_KIND_S;
|
||||
if (arg && !*arg)
|
||||
return error(_("-S requires a non-empty argument"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -93,6 +93,22 @@ test_expect_success 'usage: --no-pickaxe-regex' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'usage: -G and -S with empty argument' '
|
||||
cat >expect <<-\EOF &&
|
||||
error: -S requires a non-empty argument
|
||||
EOF
|
||||
|
||||
test_expect_code 129 git log -S "" 2>actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
cat >expect <<-\EOF &&
|
||||
error: -G requires a non-empty argument
|
||||
EOF
|
||||
|
||||
test_expect_code 129 git log -G "" 2>actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_log expect_initial --grep initial
|
||||
test_log expect_nomatch --grep InItial
|
||||
test_log_icase expect_initial --grep InItial
|
||||
|
Reference in New Issue
Block a user