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

Re: [PATCH] fetch-pack: fix object_id of exact sha1

From
Jeff King <peff@peff.net>
Date
Feb 29, 2016, 09:50 UTC
Message-ID
<20160229095041.GA2950@sigill.intra.peff.net>
In-Reply-To
<xmqqh9gseiqk.fsf@gitster.mtv.corp.google.com>
On Sun, Feb 28, 2016 at 11:29:39AM -0800, Junio C Hamano wrote:
Show 30 quoted lines
> Gabriel Souza Franco <gabrielfrancosouza@gmail.com> writes:
> 
> >>>       struct object_id oid;
> >>>
> >>> -     if (!get_oid_hex(name, &oid) && name[GIT_SHA1_HEXSZ] == ' ')
> >>> -             name += GIT_SHA1_HEXSZ + 1;
> >>> -     else
> >>> +     if (get_oid_hex(name, &oid))
> >>>               oidclr(&oid);
> >>> +     else if (name[GIT_SHA1_HEXSZ] == ' ')
> >>> +             name += GIT_SHA1_HEXSZ + 1;
> >>
> >> This makes sense to me. I wonder if we should be more particular about
> >> the pure-sha1 case consuming the whole string, though. E.g., if we get:
> >>
> >>   1234567890123456789012345678901234567890-bananas
> >>
> >> that should probably not have sha1 1234...
> >>
> >> I don't think it should ever really happen in practice, but it might be
> >> worth noticing and complaining when name[GIT_SHA1_HEXSZ] is neither
> >> space nor '\0'.
> >
> > Right. What kind of complaining? Is doing oidclr(&oid) and letting it
> > fail elsewhere enough?
> 
> I think that is the most sensible.  After all, the first get-oid-hex
> expects to find a valid 40-hex object name at the beginning of line,
> and oidclr() is the way for it to signal a broken input, which is
> how the callers of this codepath expects errors to be caught.

Actually, I think we _don't_ want to signal an error here, but checking for '\0' is still the right thing to do.

Once upon a time, fetch-pack took just the names of refs, like:
  git fetch-pack $remote refs/heads/foo

and the same format was used for --stdin. Then in 58f2ed0 (remote-curl: pass ref SHA-1 to fetch-pack as well, 2013-12-05), it learned to take "$sha1 $ref". But if we didn't see a sha1, then we continued to treat it as a refname.

This patch adds a new format, just "$sha1". So if get_oid_hex() succeeds _and_ we see '\0', we know we have that case. But if we don't see '\0', then we should assume it's a refname (e.g., "1234abcd...-bananas").

I think in practice it shouldn't matter much, as callers should be feeding fully qualified refs (and we document this). However, we still want to distinguish so that we give the correct error ("no such remote ref 1234abcd...-bananas", not "whoops, the other side doesn't have 1234abcd").

-Peff
Previous: Jeff KingNext: Jeff King
Message 26 of 28 in “fetch-pack: fix unadvertised requests validation”
  1. fetch-pack: fix unadvertised requests validationGabriel Souza Franco, Feb 27, 2016
  2. Junio C HamanoFeb 27, 2016
  3. Junio C HamanoFeb 27, 2016
  4. Junio C HamanoFeb 27, 2016
  5. Jeff KingFeb 27, 2016
  6. Jeff KingFeb 27, 2016
  7. Gabriel Souza FrancoFeb 27, 2016
  8. fetch-pack: fix object_id of exact sha1Gabriel Souza Franco, Feb 27, 2016
  9. Jeff KingFeb 27, 2016
  10. Gabriel Souza FrancoFeb 27, 2016
  11. Junio C HamanoFeb 28, 2016
  12. fetch-pack: fix object_id of exact sha1Gabriel Souza Franco, Feb 28, 2016
  13. Johannes SchindelinFeb 29, 2016
  14. Jeff KingFeb 29, 2016
  15. Gabriel Souza FrancoMar 1, 2016
  16. fetch-pack: fix object_id of exact sha1Gabriel Souza Franco, Mar 1, 2016
  17. Jeff KingMar 1, 2016
  18. Gabriel Souza FrancoMar 3, 2016
  19. Jeff KingMar 4, 2016
  20. fetch-pack: fix object_id of exact sha1Gabriel Souza Franco, Mar 5, 2016
  21. Jeff KingMar 5, 2016
  22. Junio C HamanoMar 5, 2016
  23. fetch-pack: update the documentation for "<refs>..." argumentsGabriel Souza Franco, Mar 5, 2016
  24. Junio C HamanoMar 5, 2016
  25. Jeff KingMar 1, 2016
  26. Jeff KingFeb 29, 2016
  27. Jeff KingFeb 27, 2016
  28. Junio C HamanoFeb 28, 2016

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.