All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Jeff King <peff@peff.net>
Cc: "René Scharfe" <l.s.r@web.de>,
	phillip.wood@dunelm.org.uk, Cheng <prophecheng@stu.pku.edu.cn>,
	git@vger.kernel.org
Subject: Re: [PATCH 4/5] describe: handle blob traversal with no commits
Date: Tue, 19 Aug 2025 10:05:19 +0200	[thread overview]
Message-ID: <aKQwP01nulsquhzi@pks.im> (raw)
In-Reply-To: <20250818210312.GD1024556@coredump.intra.peff.net>

On Mon, Aug 18, 2025 at 05:03:12PM -0400, Jeff King wrote:
> When describing a blob, we traverse from HEAD, remembering each commit
> we saw, and then checking each blob to report the containing commit.
> But if we haven't seen any commits at all, we'll segfault (we store the
> "current" commit as an oid initialized to the null oid, causing
> lookup_commit_reference() to return NULL).
> 
> This shouldn't be able to happen normally. We always start our traversal
> at HEAD, which must be a commit (a property which is enforced by the
> refs code). But you can trigger the segfault like this:
> 
>   blob=$(echo foo | git hash-object -w --stdin)
>   echo $blob >.git/HEAD
>   git describe $blob

I bet that the enforcement is only of partial nature, and that there are
ways to do the above e.g. via git-update-ref(1) or by playing around
with symrefs.

[snip]
> I didn't include a test here because it requires corrupting the
> repository in a way that is only easy to do using the files ref backend.
> It doesn't seem worth carrying a REFFILES test just for this oddity.

True:

    $ git update-ref HEAD HEAD^{tree}
    fatal: update_ref failed for ref 'HEAD': trying to write non-commit object 4b825dc642cb6eb9a060e54bf8d69288fbee4904 to branch 'HEAD'

But:

    $ git update-ref refs/some/tree HEAD^{tree}
    $ git symbolic-ref HEAD refs/some/tree
    $ git show
    tree HEAD

So that should allow you to write a test, right?

Patrick

  reply	other threads:[~2025-08-19  8:05 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-13  0:23 Potential Null Pointer Dereference detected by static analysis tool Cheng
2025-08-13 13:19 ` Phillip Wood
2025-08-14 23:26   ` Jeff King
2025-08-15 15:49     ` Phillip Wood
2025-08-17  9:27     ` René Scharfe
2025-08-18  4:48       ` Jeff King
2025-08-18  5:05         ` Jeff King
2025-08-18 19:56           ` René Scharfe
2025-08-18 20:21             ` Jeff King
2025-08-18 20:56               ` Jeff King
2025-08-18 20:58               ` [PATCH 0/5] fix segfault and other oddities describing blobs Jeff King
2025-08-18 20:59                 ` [PATCH 1/5] describe: pass oid struct by const pointer Jeff King
2025-08-18 21:05                   ` Junio C Hamano
2025-08-18 21:01                 ` [PATCH 2/5] describe: error if blob not found Jeff King
2025-08-18 21:12                   ` Junio C Hamano
2025-08-19  8:05                     ` Patrick Steinhardt
2025-08-19 18:32                   ` René Scharfe
2025-08-18 21:01                 ` [PATCH 3/5] describe: catch unborn branch in describe_blob() Jeff King
2025-08-18 21:19                   ` Junio C Hamano
2025-08-18 23:07                     ` Jeff King
2025-08-18 21:03                 ` [PATCH 4/5] describe: handle blob traversal with no commits Jeff King
2025-08-19  8:05                   ` Patrick Steinhardt [this message]
2025-08-19 16:59                     ` Jeff King
2025-08-20  4:34                       ` Patrick Steinhardt
2025-08-20  6:30                         ` [replacement PATCH " Jeff King
2025-08-18 21:04                 ` [PATCH 5/5] describe: pass commit to describe_commit() Jeff King
2025-08-19  8:05                   ` Patrick Steinhardt
2025-08-19 17:02                     ` Jeff King

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=aKQwP01nulsquhzi@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=l.s.r@web.de \
    --cc=peff@peff.net \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=prophecheng@stu.pku.edu.cn \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.