From: Patrick Steinhardt <ps@pks.im>
To: Christian Couder <christian.couder@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Elijah Newren <newren@gmail.com>, Jeff King <peff@peff.net>,
"brian m . carlson" <sandals@crustytoothpaste.net>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Justin Tobler <jltobler@gmail.com>
Subject: Re: [PATCH] git: avoid segfault on "git --shallow-file" without a value
Date: Thu, 13 Aug 2026 09:38:06 +0200 [thread overview]
Message-ID: <an10XhFPo0nJWJIV@pks.im> (raw)
In-Reply-To: <CAP8UFD1XMY6N3UD5FhK_oeQDX7banP1e0oKM1WHUPhPv_vzbsQ@mail.gmail.com>
On Wed, Aug 12, 2026 at 05:42:00PM +0200, Christian Couder wrote:
> On Wed, Aug 12, 2026 at 1:22 PM Patrick Steinhardt <ps@pks.im> wrote:
> >
> > On Tue, Aug 11, 2026 at 02:14:46PM +0200, Christian Couder wrote:
> > > diff --git a/git.c b/git.c
> > > index e5f1811b6b..96df15b5cd 100644
> > > --- a/git.c
> > > +++ b/git.c
> > > @@ -304,11 +304,15 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
> > > if (envchanged)
> > > *envchanged = 1;
> > > } else if (!strcmp(cmd, "--shallow-file")) {
> > > - (*argv)++;
> > > - (*argc)--;
> > > - setenv(GIT_SHALLOW_FILE_ENVIRONMENT, (*argv)[0], 1);
> > > + if (*argc < 2) {
> > > + fprintf(stderr, _("no file given for '%s' option\n" ), "--shallow-file");
> > > + usage(git_usage_string);
> >
> > Should we maybe condense this into a single line?
> >
> > usage(_("no file given for '%s' option\n")), "--shallow-file")
> >
> > I think that also printing the usage string is only distracting and
> > doesn't really give the user a lot of extra context.
>
> The goal of this patch is to fix the bug by using the same code as the
> other options that can be passed a value like "--git-dir",
> "--namespace", "--work-tree", and so on. Now all these options use the
> same pattern for the error message:
>
> git grep -A3 'if (\*argc < 2)' git.c
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("no directory given
> for '%s' option\n" ), "--git-dir");
> git.c- usage(git_usage_string);
> git.c- }
> --
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("no namespace given
> for --namespace\n" ));
> git.c- usage(git_usage_string);
> git.c- }
> --
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("no directory given
> for '%s' option\n" ), "--work-tree");
> git.c- usage(git_usage_string);
> git.c- }
> --
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("-c expects a
> configuration string\n" ));
> git.c- usage(git_usage_string);
> git.c- }
> --
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("no config key given
> for --config-env\n" ));
> git.c- usage(git_usage_string);
> git.c- }
> --
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("no directory given
> for '%s' option\n" ), "-C");
> git.c- usage(git_usage_string);
> git.c- }
> --
> git.c: if (*argc < 2) {
> git.c- fprintf(stderr, _("no attribute source
> given for --attr-source\n" ));
> git.c- usage(git_usage_string);
> git.c- }
>
> So I don't think it makes sense for "--shallow-file" to not be
> consistent with these other options.
>
> I could perhaps add a patch to the series to convert all of these to
> something like what you suggest, but it could also be done in a
> separate patch series by someone else.
>
> Anyway thanks for reviewing this patch.
No, I don't think that's really necessary. Given the existing usage I
think your patch looks sensible. Thanks!
Patrick
prev parent reply other threads:[~2026-08-13 7:38 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-11 12:14 [PATCH] git: avoid segfault on "git --shallow-file" without a value Christian Couder
2026-08-11 19:16 ` Junio C Hamano
2026-08-12 16:15 ` Christian Couder
2026-08-12 17:13 ` Junio C Hamano
2026-08-12 11:22 ` Patrick Steinhardt
2026-08-12 15:42 ` Christian Couder
2026-08-13 7:38 ` Patrick Steinhardt [this message]
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=an10XhFPo0nJWJIV@pks.im \
--to=ps@pks.im \
--cc=Johannes.Schindelin@gmx.de \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jltobler@gmail.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--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