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

Re: [RFC 04/13] add_ref(): move the call of check_refname_format() to callers

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 19, 2011, 21:49 UTC
Message-ID
<7vsjmobqim.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1319057716-28094-5-git-send-email-mhagger@alum.mit.edu>
mhagger@alum.mit.edu writes:
Show 5 quoted lines
> I'm still not clear on how extra_refs are used.  Are they generated
> from local refs or are they generated from remote refs?  If the
> latter, then it is probably irresponsible not to do *some* sanity
> checking in add_extra_ref() to prevent any chance of refnames like
> "../../../etc/passwd".

No, add_extra_ref() already tells us what their values are, these are never used to actually read from filesystem. Their refname field has almost no value other than for debugging and we probably shouldn't even insist on uniqueness among extra refs or for that matter collision with the real refs. As I mentioned in an earlier message, their only raison d'être is to be found by for_each_ref() that feeds revision machinery with up to which commits we know we have complete histories for. A sample call chain looks like this:

 - cmd_clone()
  - setup_reference()
   - add_one_reference()
     - add_extra_ref()
       adds refs in other repositories we borrow from as "extra"
  - transport_fetch_refs()
   - fetch_refs_via_pack()
    - fetch_pack()
     - do_fetch_pack()
      - find_common()
       - for_each_ref(rev_list_insert_ref)

That way find_common() thinks histories leading to these extra refs are already complete on our end (i.e. we have all the necessary objects), and by subtracting that from what we are asking from the other end, we can reduce the amount of history that needs to be transferred.

Previous: mhagger@alum.mit.eduNext: Michael Haggerty
Message 6 of 17 in “[RFC 00/13] Checking full vs. partial refnames”
  1. mhagger@alum.mit.eduOct 19, 2011
  2. 01/13 check_refname_component(): iterate via index rather than via pointermhagger@alum.mit.edu, Oct 19, 2011
  3. 02/13 parse_refname_prefix(): new functionmhagger@alum.mit.edu, Oct 19, 2011
  4. 03/13 Teach check_refname_format() to check full refnamesmhagger@alum.mit.edu, Oct 19, 2011
  5. 04/13 add_ref(): move the call of check_refname_format() to callersmhagger@alum.mit.edu, Oct 19, 2011
  6. Junio C HamanoOct 19, 2011
  7. Michael HaggertyOct 19, 2011
  8. 05/13 receive-pack::update(): use check_refname_format(..., REFNAME_FULL)mhagger@alum.mit.edu, Oct 19, 2011
  9. 06/13 strbuf_check_branch_ref(): use check_refname_format(..., REFNAME_FULL)mhagger@alum.mit.edu, Oct 19, 2011
  10. 07/13 one_local_ref(): use check_refname_format(..., REFNAME_FULL)mhagger@alum.mit.edu, Oct 19, 2011
  11. 08/13 expand_namespace(): the refname is full, so use REFNAME_FULL optionmhagger@alum.mit.edu, Oct 19, 2011
  12. 09/13 new_branch(): verify that new branch name is a valid full refnamemhagger@alum.mit.edu, Oct 19, 2011
  13. Junio C HamanoOct 19, 2011
  14. 10/13 strbuf_check_tag_ref(): the refname is full, so use REFNAME_FULL optionmhagger@alum.mit.edu, Oct 19, 2011
  15. 11/13 replace_object(): the refname is full, so use REFNAME_FULL optionmhagger@alum.mit.edu, Oct 19, 2011
  16. 12/13 resolve_ref: use check_refname_format(..., REFNAME_FULL)mhagger@alum.mit.edu, Oct 19, 2011
  17. 13/13 filter_refs(): the refname is full, so use REFNAME_FULL optionmhagger@alum.mit.edu, Oct 19, 2011

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.