Skip to content

Commit

Permalink
Merge branch 'mh/check-ref-format-print-normalize' into maint
Browse files Browse the repository at this point in the history
* mh/check-ref-format-print-normalize:
  Forbid DEL characters in reference names
  check-ref-format --print: Normalize refnames that start with slashes
  • Loading branch information
Junio C Hamano committed Sep 23, 2011
2 parents 503359f + f3738c1 commit be5acb3
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
6 changes: 3 additions & 3 deletions builtin/check-ref-format.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ static const char builtin_check_ref_format_usage[] =
" or: git check-ref-format --branch <branchname-shorthand>";

/*
* Replace each run of adjacent slashes in src with a single slash,
* and write the result to dst.
* Remove leading slashes and replace each run of adjacent slashes in
* src with a single slash, and write the result to dst.
*
* This function is similar to normalize_path_copy(), but stripped down
* to meet check_ref_format's simpler needs.
*/
static void collapse_slashes(char *dst, const char *src)
{
char ch;
char prev = '\0';
char prev = '/';

while ((ch = *src++) != '\0') {
if (prev == '/' && ch == prev)
Expand Down
2 changes: 1 addition & 1 deletion refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -837,7 +837,7 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)

static inline int bad_ref_char(int ch)
{
if (((unsigned) ch) <= ' ' ||
if (((unsigned) ch) <= ' ' || ch == 0x7f ||
ch == '~' || ch == '^' || ch == ':' || ch == '\\')
return 1;
/* 2.13 Pattern Matching Notation */
Expand Down
9 changes: 9 additions & 0 deletions t/t1402-check-ref-format.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ invalid_ref 'foo'
valid_ref 'foo/bar/baz'
valid_ref 'refs///heads/foo'
invalid_ref 'heads/foo/'
valid_ref '/heads/foo'
valid_ref '///heads/foo'
invalid_ref '/foo'
invalid_ref './foo'
invalid_ref '.refs/foo'
invalid_ref 'heads/foo..bar'
Expand All @@ -27,6 +30,9 @@ invalid_ref 'heads/foo.lock'
valid_ref 'heads/foo@bar'
invalid_ref 'heads/v@{ation'
invalid_ref 'heads/foo\bar'
invalid_ref "$(printf 'heads/foo\t')"
invalid_ref "$(printf 'heads/foo\177')"
valid_ref "$(printf 'heads/fu\303\237')"

test_expect_success "check-ref-format --branch @{-1}" '
T=$(git write-tree) &&
Expand Down Expand Up @@ -70,7 +76,10 @@ invalid_ref_normalized() {

valid_ref_normalized 'heads/foo' 'heads/foo'
valid_ref_normalized 'refs///heads/foo' 'refs/heads/foo'
valid_ref_normalized '/heads/foo' 'heads/foo'
valid_ref_normalized '///heads/foo' 'heads/foo'
invalid_ref_normalized 'foo'
invalid_ref_normalized '/foo'
invalid_ref_normalized 'heads/foo/../bar'
invalid_ref_normalized 'heads/./foo'
invalid_ref_normalized 'heads\foo'
Expand Down

0 comments on commit be5acb3

Please sign in to comment.