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

Bug in "git rev-parse --verify"

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Mar 28, 2013, 13:04 UTC
Message-ID
<51543FDB.9010109@alum.mit.edu>

On Junio's master, "git rev-parse --verify" accepts *any* 40-digit hexadecimal number. For example, pass it 40 "1" characters, and it accepts the argument:

$ git rev-parse --verify 1111111111111111111111111111111111111111 1111111111111111111111111111111111111111 $ echo $? 0

Obviously, my repo doesn't have an object with this hash :-) so I think this argument should be rejected.

If you add or remove a digit (to make the length different than 40), it is correctly rejected:

$ git rev-parse --verify 111111111111111111111111111111111111111 fatal: Needed a single revision $ echo $? 128

I believe that "git rev-parse --verify" is meant to verify that the
argument is an actual object, and that it should reject fictional SHA1s.
 (If not then the documentation should be clarified.)  The same problem
also exists in 1.8.2 but I haven't checked how much older it is.
The behavior presumably comes from the following clause in get_sha1_basic():
	if (len == 40 && !get_sha1_hex(str, sha1))
		return 0;
I won't have time to pursue this.
Michael
-- 
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
Next: Jeff King
Message 1 of 22 in “Bug in "git rev-parse --verify"”
  1. Michael HaggertyMar 28, 2013
  2. Jeff KingMar 28, 2013
  3. Junio C HamanoMar 28, 2013
  4. Michael HaggertyMar 28, 2013
  5. Jeff KingMar 28, 2013
  6. Michael HaggertyMar 28, 2013
  7. Jeff KingMar 28, 2013
  8. Junio C HamanoMar 28, 2013
  9. Michael HaggertyMar 30, 2013
  10. Junio C HamanoMar 30, 2013
  11. Junio C HamanoMar 30, 2013
  12. Michael HaggertyMar 30, 2013
  13. Junio C HamanoMar 30, 2013
  14. Junio C HamanoMar 30, 2013
  15. Michael HaggertyMar 30, 2013
  16. Elia PintoMar 30, 2013
  17. 1/2 peel_onion: disambiguate to favor tree-ish when we want a tree-ishJunio C Hamano, Mar 31, 2013
  18. 2/2 peel_onion(): teach $foo^{object} peelerJunio C Hamano, Mar 31, 2013
  19. Michael HaggertyApr 2, 2013
  20. Junio C HamanoApr 2, 2013
  21. Michael HaggertyApr 2, 2013
  22. Junio C HamanoApr 2, 2013

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.