diff options
author | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-01-17 21:20:56 +0300 |
---|---|---|
committer | Kim Carlbäcker <kim.carlbacker@gmail.com> | 2018-01-17 21:20:56 +0300 |
commit | b428a650bfaefdd1e65631dd54d9f455fc60d67c (patch) | |
tree | c5d2091d15628ab486ac7578d13ce4bab3592814 | |
parent | 59467cb9a9526abf28d78d8cec01f366c5cef2cd (diff) | |
parent | 19e8e8552776dfb73d5eb4407b3b6ec786210e0d (diff) |
Merge branch 'fix-write-ref-validation' into 'master'
Fix Validation for Repository::WriteRef
See merge request gitlab-org/gitaly!542
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | internal/service/repository/write_ref.go | 2 | ||||
-rw-r--r-- | internal/service/repository/write_ref_test.go | 30 |
3 files changed, 32 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d82c7da5c..5df5ef2ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ UNRELEASED - Add tempdir package https://gitlab.com/gitlab-org/gitaly/merge_requests/538 +- Fix validation for Repositoryservice::WriteRef + https://gitlab.com/gitlab-org/gitaly/merge_requests/542 v0.70.0 diff --git a/internal/service/repository/write_ref.go b/internal/service/repository/write_ref.go index 61726d3f1..86de86038 100644 --- a/internal/service/repository/write_ref.go +++ b/internal/service/repository/write_ref.go @@ -44,7 +44,7 @@ func validateWriteRefRequest(req *pb.WriteRefRequest) error { } } - if !bytes.HasPrefix(req.Ref, []byte("refs/")) { + if !bytes.Equal(req.Ref, []byte("HEAD")) && !bytes.HasPrefix(req.Ref, []byte("refs/")) { return fmt.Errorf("Ref has to be a full reference") } return nil diff --git a/internal/service/repository/write_ref_test.go b/internal/service/repository/write_ref_test.go index 18196076a..9be86546c 100644 --- a/internal/service/repository/write_ref_test.go +++ b/internal/service/repository/write_ref_test.go @@ -2,6 +2,7 @@ package repository import ( "bytes" + "path" "testing" "github.com/stretchr/testify/require" @@ -34,6 +35,24 @@ func TestWriteRefSuccessful(t *testing.T) { }, }, { + desc: "rugged update refs/keep-around/4a24d82dbca5c11c61556f3b35ca472b7463187e", + req: &pb.WriteRefRequest{ + Repository: testRepo, + Ref: []byte("refs/keep-around/4a24d82dbca5c11c61556f3b35ca472b7463187e"), + Revision: []byte("4a24d82dbca5c11c61556f3b35ca472b7463187e"), + Shell: false, + }, + }, + { + desc: "rugged update HEAD to refs/heads/master", + req: &pb.WriteRefRequest{ + Repository: testRepo, + Ref: []byte("HEAD"), + Revision: []byte("refs/heads/master"), + Shell: false, + }, + }, + { desc: "shell update refs/heads/master", req: &pb.WriteRefRequest{ Repository: testRepo, @@ -62,6 +81,14 @@ func TestWriteRefSuccessful(t *testing.T) { require.NoError(t, err) + if bytes.Equal(tc.req.Ref, []byte("HEAD")) { + content := testhelper.MustReadFile(t, path.Join(testRepoPath, "HEAD")) + + refRevision := bytes.Join([][]byte{[]byte("ref: "), tc.req.Revision, []byte("\n")}, nil) + + require.EqualValues(t, content, refRevision) + return + } rev := testhelper.MustRunCommand(t, nil, "git", "--git-dir", testRepoPath, "log", "--pretty=%H", "-1", string(tc.req.Ref)) rev = bytes.Replace(rev, []byte("\n"), nil, 1) @@ -100,11 +127,12 @@ func TestWriteRefValidationError(t *testing.T) { }, }, { - desc: "non-prefixed ref name", + desc: "non-prefixed ref name for shell", req: &pb.WriteRefRequest{ Repository: testRepo, Ref: []byte("master"), Revision: []byte("498214de67004b1da3d820901307bed2a68a8ef6"), + Shell: true, }, }, { |