From: Junio C Hamano <gitster@pobox.com>
To: "brian m. carlson" <sandals@crustytoothpaste.net>
Cc: <git@vger.kernel.org>, Jared Van Bortel <cebtenzzre@gmail.com>
Subject: Re: [PATCH] diff: don't crash with empty argument to -G or -S
Date: Tue, 18 Feb 2025 10:16:32 -0800 [thread overview]
Message-ID: <xmqqbjuzxgn3.fsf@gitster.g> (raw)
In-Reply-To: <20250217175759.1576684-1-sandals@crustytoothpaste.net> (brian m. carlson's message of "Mon, 17 Feb 2025 17:57:59 +0000")
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
> 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
I agree BUG is unwelcome. I am not sure about the value of
forbidding an empty string (I am sure about forbidding NULL,
though).
If an empty matches everything, "git log -S" would skip changes that
would keep the number of lines, right? For the history of a project
that keeps track of source code, such a "feature" would not be
useful, but I can see a complaint by somebody who may want to keep
track of a "list of things" one-item-per-line, if we had been
allowing an empty string. It would be a regression for such a niche
user.
Luckily, since we have stopped with a "BUG", we do not have to worry
about backward compatibility in this case ;-)
> 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.
So I'd say that it may be a bit premature for us to declare
"anything useful", I am perfectly fine with the patch given here.
If somebody who wants to maintain a text file, one-item-per-line
that keeps track of a list of things to omit commits that do not
change the number of items, they can drop "&& !*arg" part, tweak the
message and add their own tests, once this fix lands and the dust
settles.
Thanks for a quick fix. Will queue.
>
> Reported-by: Jared Van Bortel <cebtenzzre@gmail.com>
> Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
> ---
> diff.c | 4 ++++
> t/t4209-log-pickaxe.sh | 16 ++++++++++++++++
> 2 files changed, 20 insertions(+)
>
> diff --git a/diff.c b/diff.c
> index 019fb893a7..c89c15d98e 100644
> --- a/diff.c
> +++ b/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;
> }
>
> diff --git a/t/t4209-log-pickaxe.sh b/t/t4209-log-pickaxe.sh
> index a675ace081..0e2f80a268 100755
> --- a/t/t4209-log-pickaxe.sh
> +++ b/t/t4209-log-pickaxe.sh
> @@ -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
next prev parent reply other threads:[~2025-02-18 18:16 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-17 1:24 Crash on empty pickaxe argument Jared Van Bortel
2025-02-17 1:58 ` brian m. carlson
2025-02-17 17:57 ` [PATCH] diff: don't crash with empty argument to -G or -S brian m. carlson
2025-02-17 22:18 ` Elijah Newren
2025-02-18 18:16 ` Junio C Hamano [this message]
2025-02-18 19:29 ` brian m. carlson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqbjuzxgn3.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=cebtenzzre@gmail.com \
--cc=git@vger.kernel.org \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).