Git development
 help / color / mirror / Atom feed
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

      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