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:
brian m. carlson
2025-02-17 17:57:59 +00:00
committed by Junio C Hamano
parent f93ff170b9
commit a620046b29
2 changed files with 20 additions and 0 deletions

4
diff.c
View File

@ -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;
}

View File

@ -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