git/list[1] front-page[2] threads[3] people[4] search[5] about
 

ref-format checking regression

From
Jeff King <peff@peff.net>
Date
Apr 27, 2012, 11:50 UTC
Message-ID
<20120427115000.GA8126@sigill.intra.peff.net>

I upgraded git on a machine recently, and it created problems for a repo with a bogus character in a ref name. Older versions of git never complained about it. Newer ones, containing your dce4bab ("add_ref(): verify that the refname is formatted correctly") do. That's fine; it's bogus and git _should_ complain about it.

However, recovering from the situation is unnecessarily hard, as basic things like fsck stop working, you can't access the ref via rev-parse, etc. You can reproduce with something like this (in some repo with actual commits):

  $ evil=$(printf 'foo\177bar')
  $ git rev-parse HEAD >".git/refs/tags/$evil"
  $ git fsck
  fatal: Reference has invalid format: 'refs/tags/foo^?bar'
  [does not even warn about the real reason for the error]
  $ git rev-parse --verify "$evil"
  fatal: Needed a single revision
  [does not let you find broken refs]
  $ git for-each-ref
  fatal: Reference has invalid format: 'refs/tags/foo^?bar'
  $ git tag -l
  fatal: Reference has invalid format: 'refs/tags/foo^?bar'
  [no way to rename or delete the bogus tag]
  $ git tag fixed "$evil"
  fatal: Failed to resolve 'foo^?bar' as a valid ref.

I seem to recall discussing this format-tightening and trying to be sure that users were left with a way forward for fixing their repos. But I can't find the discussion, and I don't recall any conclusion we came to. So maybe we decided not to worry about it. But I thought I'd mention it as a data point.

-Peff
Next: Ævar Arnfjörð Bjarmason
Message 1 of 5 in “ref-format checking regression”
  1. Jeff KingApr 27, 2012
  2. Ævar Arnfjörð BjarmasonApr 27, 2012
  3. Junio C HamanoApr 27, 2012
  4. Junio C HamanoApr 27, 2012
  5. Jeff KingApr 28, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.