Skip to content

Commit f3cc52d

Browse files
jrngitster
authored andcommitted
packed-ref cache: forbid dot-components in refnames
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 <[email protected]> Reviewed-by: Ronnie Sahlberg <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 18f29fc commit f3cc52d

File tree

2 files changed

+4
-16
lines changed

2 files changed

+4
-16
lines changed

refs.c

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,8 @@ static int check_refname_component(const char *refname, int flags)
7070
out:
7171
if (cp == refname)
7272
return 0; /* Component has zero length. */
73-
if (refname[0] == '.') {
74-
if (!(flags & REFNAME_DOT_COMPONENT))
75-
return -1; /* Component starts with '.'. */
76-
/*
77-
* Even if leading dots are allowed, don't allow "."
78-
* as a component (".." is prevented by a rule above).
79-
*/
80-
if (refname[1] == '\0')
81-
return -1; /* Component equals ".". */
82-
}
73+
if (refname[0] == '.')
74+
return -1; /* Component starts with '.'. */
8375
if (cp - refname >= LOCK_SUFFIX_LEN &&
8476
!memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN))
8577
return -1; /* Refname ends with ".lock". */
@@ -290,7 +282,7 @@ static struct ref_entry *create_ref_entry(const char *refname,
290282
struct ref_entry *ref;
291283

292284
if (check_name &&
293-
check_refname_format(refname, REFNAME_ALLOW_ONELEVEL|REFNAME_DOT_COMPONENT))
285+
check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
294286
die("Reference has invalid format: '%s'", refname);
295287
len = strlen(refname) + 1;
296288
ref = xmalloc(sizeof(struct ref_entry) + len);

refs.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,18 +229,14 @@ extern int for_each_reflog(each_ref_fn, void *);
229229

230230
#define REFNAME_ALLOW_ONELEVEL 1
231231
#define REFNAME_REFSPEC_PATTERN 2
232-
#define REFNAME_DOT_COMPONENT 4
233232

234233
/*
235234
* Return 0 iff refname has the correct format for a refname according
236235
* to the rules described in Documentation/git-check-ref-format.txt.
237236
* If REFNAME_ALLOW_ONELEVEL is set in flags, then accept one-level
238237
* reference names. If REFNAME_REFSPEC_PATTERN is set in flags, then
239238
* allow a "*" wildcard character in place of one of the name
240-
* components. No leading or repeated slashes are accepted. If
241-
* REFNAME_DOT_COMPONENT is set in flags, then allow refname
242-
* components to start with "." (but not a whole component equal to
243-
* "." or "..").
239+
* components. No leading or repeated slashes are accepted.
244240
*/
245241
extern int check_refname_format(const char *refname, int flags);
246242

0 commit comments

Comments
 (0)