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

[PATCH 18/25] packed-ref cache: forbid dot-components in refnames

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 15, 2014, 00:53 UTC
Message-ID
<20141015005323.GV32245@google.com>
In-Reply-To
<20141015004522.GD32245@google.com>
Date: Fri, 26 Sep 2014 12:22:22 -0700

Since v1.7.9-rc1~10^2 (write_head_info(): handle "extra refs" locally, 2012-01-06), this trick to keep track of ".have" refs that are only valid on the wire and not on the filesystem is not needed any more.

Simplify by removing support for the REFNAME_DOT_COMPONENT flag.

This means we'll be slightly stricter with invalid refs found in a packed-refs file or during clone. read_loose_refs() already checks for and skips refnames with .components so it is not affected.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Reviewed-by: Ronnie Sahlberg <sahlberg@google.com>
---
 refs.c | 14 +++-----------
 refs.h |  6 +-----
 2 files changed, 4 insertions(+), 16 deletions(-)
diff --git a/refs.c b/refs.c
index 4fe263e..fe1352a 100644
--- a/refs.c
+++ b/refs.c
@@ -70,16 +70,8 @@ static int check_refname_component(const char *refname, int flags)
 out:
 	if (cp == refname)
 		return 0; /* Component has zero length. */
-	if (refname[0] == '.') {
-		if (!(flags & REFNAME_DOT_COMPONENT))
-			return -1; /* Component starts with '.'. */
-		/*
-		 * Even if leading dots are allowed, don't allow "."
-		 * as a component (".." is prevented by a rule above).
-		 */
-		if (refname[1] == '\0')
-			return -1; /* Component equals ".". */
-	}
+	if (refname[0] == '.')
+		return -1; /* Component starts with '.'. */
 	if (cp - refname >= LOCK_SUFFIX_LEN &&
 	    !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN))
 		return -1; /* Refname ends with ".lock". */
@@ -290,7 +282,7 @@ static struct ref_entry *create_ref_entry(const char *refname,
 	struct ref_entry *ref;
 
 	if (check_name &&
-	    check_refname_format(refname, REFNAME_ALLOW_ONELEVEL|REFNAME_DOT_COMPONENT))
+	    check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
 		die("Reference has invalid format: '%s'", refname);
 	len = strlen(refname) + 1;
 	ref = xmalloc(sizeof(struct ref_entry) + len);
diff --git a/refs.h b/refs.h
index 79802d7..c61b8f4 100644
--- a/refs.h
+++ b/refs.h
@@ -229,7 +229,6 @@ extern int for_each_reflog(each_ref_fn, void *);
 
 #define REFNAME_ALLOW_ONELEVEL 1
 #define REFNAME_REFSPEC_PATTERN 2
-#define REFNAME_DOT_COMPONENT 4
 
 /*
  * Return 0 iff refname has the correct format for a refname according
@@ -237,10 +236,7 @@ extern int for_each_reflog(each_ref_fn, void *);
  * If REFNAME_ALLOW_ONELEVEL is set in flags, then accept one-level
  * reference names.  If REFNAME_REFSPEC_PATTERN is set in flags, then
  * allow a "*" wildcard character in place of one of the name
- * components.  No leading or repeated slashes are accepted.  If
- * REFNAME_DOT_COMPONENT is set in flags, then allow refname
- * components to start with "." (but not a whole component equal to
- * "." or "..").
+ * components.  No leading or repeated slashes are accepted.
  */
 extern int check_refname_format(const char *refname, int flags);
 
-- 
2.1.0.rc2.206.gedb03e5
Previous: Jonathan NiederNext: Jonathan Nieder
Message 19 of 28 in “rs/ref-transaction ("Use ref transactions", part 3)”
  1. 0/25 rs/ref-transaction ("Use ref transactions", part 3)Jonathan Nieder, Oct 15, 2014
  2. 01/25 mv test: recreate mod/ directory instead of relying on stale copyJonathan Nieder, Oct 15, 2014
  3. 02/25 wrapper.c: remove/unlink_or_warn: simplify, treat ENOENT as successJonathan Nieder, Oct 15, 2014
  4. 03/25 refs.c: lock_ref_sha1_basic is used for all refsJonathan Nieder, Oct 15, 2014
  5. 04/25 wrapper.c: add a new function unlink_or_msgJonathan Nieder, Oct 15, 2014
  6. 05/25 refs.c: add an err argument to delete_ref_looseJonathan Nieder, Oct 15, 2014
  7. 06/25 refs.c: pass the ref log message to _create/delete/update instead of _commitJonathan Nieder, Oct 15, 2014
  8. 07/25 rename_ref: don't ask read_ref_full where the ref came fromJonathan Nieder, Oct 15, 2014
  9. 08/25 refs.c: refuse to lock badly named refs in lock_ref_sha1_basicJonathan Nieder, Oct 15, 2014
  10. 09/25 refs.c: call lock_ref_sha1_basic directly from commitJonathan Nieder, Oct 15, 2014
  11. 10/25 refs.c: pass a list of names to skip to is_refname_availableJonathan Nieder, Oct 15, 2014
  12. 11/25 refs.c: ref_transaction_commit: distinguish name conflicts from other errorsJonathan Nieder, Oct 15, 2014
  13. 12/25 fetch.c: change s_update_ref to use a ref transactionJonathan Nieder, Oct 15, 2014
  14. 13/25 refs.c: make write_ref_sha1 staticJonathan Nieder, Oct 15, 2014
  15. 14/25 refs.c: change resolve_ref_unsafe reading argument to be a flags fieldJonathan Nieder, Oct 15, 2014
  16. 15/25 reflog test: test interaction with detached HEADJonathan Nieder, Oct 15, 2014
  17. 16/25 branch -d: avoid repeated symref resolutionJonathan Nieder, Oct 15, 2014
  18. 17/25 branch -d: simplify by using RESOLVE_REF_READINGJonathan Nieder, Oct 15, 2014
  19. 18/25 packed-ref cache: forbid dot-components in refnamesJonathan Nieder, Oct 15, 2014
  20. 19/25 test: put tests for handling of bad ref names in one placeJonathan Nieder, Oct 15, 2014
  21. 20/25 refs.c: allow listing and deleting badly named refsJonathan Nieder, Oct 15, 2014
  22. 21/25 for-each-ref: skip and warn about broken ref namesJonathan Nieder, Oct 15, 2014
  23. 22/25 remote rm/prune: print a message when writing packed-refs failsJonathan Nieder, Oct 15, 2014
  24. 23/25 refs.c: do not permit err == NULLJonathan Nieder, Oct 15, 2014
  25. 24/25 lockfile: remove unable_to_lock_errorJonathan Nieder, Oct 15, 2014
  26. 25/25 ref_transaction_commit: bail out on failure to remove a refJonathan Nieder, Oct 15, 2014
  27. Junio C HamanoOct 15, 2014
  28. Michael HaggertyOct 16, 2014

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.