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

Re: [PATCH 05/29] refname_is_safe(): insist that the refname already be normalized

From
Jeff King <peff@peff.net>
Date
Apr 27, 2016, 20:15 UTC
Message-ID
<20160427201512.GA8073@sigill.intra.peff.net>
In-Reply-To
<1461787832.11504.1.camel@twopensource.com>
On Wed, Apr 27, 2016 at 04:10:32PM -0400, David Turner wrote:
Show 16 quoted lines
> On Wed, 2016-04-27 at 10:59 -0700, Junio C Hamano wrote:
> 
> > There is another call to refname_is_safe() in resolve_ref_unsafe(),
> > which applies the sanity check to the string from a symref.  We seem
> > to allow
> > 
> >     $ git symbolic-ref refs/heads/SSS refs/heads//master
> > 
> > and we end up storing "ref: refs/heads//master" (or make a symbolic
> > link with doubled slashes), but the current code considers the
> > resulting symbolic link as "dangling".  Again, this change moves the
> > rejection a bit earlier in the codepath, without changing the end
> > result, I'd think.
> 
> I think we should disallow that -- refname_is_safe should probably call
> (or be replaced with calls to) check_refname_format.  

I thought the point is that one is a lesser check than the other, and we need different rules for different situations. So we might allow deletion on a refname that does not pass check_refname_format(), but we must make sure it is not going to cause any mischief (e.g., escaping ".git" and deleting random files).

But anything writing a _new_ refname (whether the actual ref, or referencing it via a symref) should be using check_refname_format() before writing.

-Peff
Previous: David TurnerNext: David Turner
Message 9 of 70 in “Yet more preparation for reference backends”
  1. 00/29 Yet more preparation for reference backendsMichael Haggerty, Apr 27, 2016
  2. 01/29 safe_create_leading_directories(): improve docstringMichael Haggerty, Apr 27, 2016
  3. 02/29 remove_dir_recursively(): add docstringMichael Haggerty, Apr 27, 2016
  4. 03/29 refname_is_safe(): use skip_prefix()Michael Haggerty, Apr 27, 2016
  5. 04/29 refname_is_safe(): don't allow the empty stringMichael Haggerty, Apr 27, 2016
  6. 05/29 refname_is_safe(): insist that the refname already be normalizedMichael Haggerty, Apr 27, 2016
  7. Junio C HamanoApr 27, 2016
  8. David TurnerApr 27, 2016
  9. Jeff KingApr 27, 2016
  10. David TurnerApr 27, 2016
  11. Jeff KingApr 27, 2016
  12. Jeff KingApr 27, 2016
  13. David TurnerApr 28, 2016
  14. 06/29 commit_ref_update(): write error message to *err, not stderrMichael Haggerty, Apr 27, 2016
  15. 07/29 rename_ref(): remove unneeded local variableMichael Haggerty, Apr 27, 2016
  16. 08/29 ref_transaction_commit(): remove local variable nMichael Haggerty, Apr 27, 2016
  17. Junio C HamanoApr 27, 2016
  18. Junio C HamanoApr 27, 2016
  19. 09/29 read_raw_ref(): rename flags argument to typeMichael Haggerty, Apr 27, 2016
  20. 10/29 read_raw_ref(): clear *type at start of functionMichael Haggerty, Apr 27, 2016
  21. 11/29 read_raw_ref(): rename symref argument to referentMichael Haggerty, Apr 27, 2016
  22. 12/29 read_raw_ref(): improve docstringMichael Haggerty, Apr 27, 2016
  23. Junio C HamanoApr 27, 2016
  24. 13/29 lock_ref_sha1_basic(): remove unneeded local variableMichael Haggerty, Apr 27, 2016
  25. 14/29 refs: make error messages more consistentMichael Haggerty, Apr 27, 2016
  26. 15/29 ref_transaction_create(): disallow recursive pruningMichael Haggerty, Apr 27, 2016
  27. Junio C HamanoApr 27, 2016
  28. David TurnerApr 27, 2016
  29. Junio C HamanoApr 27, 2016
  30. Junio C HamanoApr 27, 2016
  31. David TurnerApr 28, 2016
  32. Junio C HamanoApr 28, 2016
  33. Michael HaggertyApr 29, 2016
  34. Junio C HamanoApr 29, 2016
  35. Junio C HamanoApr 29, 2016
  36. Michael HaggertyApr 29, 2016
  37. 16/29 ref_transaction_commit(): correctly report close_ref() failureMichael Haggerty, Apr 27, 2016
  38. 17/29 delete_branches(): use resolve_refdup()Michael Haggerty, Apr 27, 2016
  39. 18/29 refs: allow log-only updatesMichael Haggerty, Apr 27, 2016
  40. 19/29 refs: don't dereference on renameMichael Haggerty, Apr 27, 2016
  41. Junio C HamanoApr 27, 2016
  42. Michael HaggertyApr 29, 2016
  43. Junio C HamanoApr 29, 2016
  44. Michael HaggertyApr 29, 2016
  45. Jeff KingApr 29, 2016
  46. Michael HaggertyApr 29, 2016
  47. Jeff KingApr 29, 2016
  48. Junio C HamanoApr 29, 2016
  49. David TurnerApr 29, 2016
  50. Michael HaggertyApr 30, 2016
  51. Junio C HamanoMay 2, 2016
  52. 20/29 verify_refname_available(): adjust constness in declarationMichael Haggerty, Apr 27, 2016
  53. 21/29 add_update(): initialize the whole ref_updateMichael Haggerty, Apr 27, 2016
  54. 22/29 lock_ref_for_update(): new functionMichael Haggerty, Apr 27, 2016
  55. 23/29 unlock_ref(): move definition higher in the fileMichael Haggerty, Apr 27, 2016
  56. 24/29 ref_transaction_update(): check refname_is_safe() at a minimumMichael Haggerty, Apr 27, 2016
  57. Junio C HamanoApr 27, 2016
  58. Michael HaggertyApr 29, 2016
  59. Junio C HamanoApr 29, 2016
  60. 25/29 refs: resolve symbolic refs firstMichael Haggerty, Apr 27, 2016
  61. David TurnerApr 28, 2016
  62. Michael HaggertyApr 29, 2016
  63. David TurnerApr 29, 2016
  64. Junio C HamanoMay 2, 2016
  65. 26/29 lock_ref_for_update(): don't re-read non-symbolic referencesMichael Haggerty, Apr 27, 2016
  66. 27/29 lock_ref_for_update(): don't resolve symrefsMichael Haggerty, Apr 27, 2016
  67. 28/29 commit_ref_update(): remove the flags parameterMichael Haggerty, Apr 27, 2016
  68. 29/29 lock_ref_sha1_basic(): only handle REF_NODEREF modeMichael Haggerty, Apr 27, 2016
  69. Junio C HamanoApr 29, 2016
  70. David TurnerApr 29, 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.