Bladeren bron

repo_editor: prohibits uploading files to `.git.` directory (#6970)

Co-authored-by: Joe Chen <[email protected]>
1135 2 jaren geleden
bovenliggende
commit
519aeefbd9
2 gewijzigde bestanden met toevoegingen van 21 en 11 verwijderingen
  1. 5 1
      internal/db/repo_editor.go
  2. 16 10
      internal/db/repo_editor_test.go

+ 5 - 1
internal/db/repo_editor.go

@@ -460,7 +460,11 @@ type UploadRepoFileOptions struct {
 
 // isRepositoryGitPath returns true if given path is or resides inside ".git" path of the repository.
 func isRepositoryGitPath(path string) bool {
-	return strings.HasSuffix(path, ".git") || strings.Contains(path, ".git"+string(os.PathSeparator))
+	return strings.HasSuffix(path, ".git") ||
+		strings.Contains(path, ".git"+string(os.PathSeparator)) ||
+		// Windows treats ".git." the same as ".git"
+		strings.HasSuffix(path, ".git.") ||
+		strings.Contains(path, ".git."+string(os.PathSeparator))
 }
 
 func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) error {

+ 16 - 10
internal/db/repo_editor_test.go

@@ -13,21 +13,27 @@ import (
 
 func Test_isRepositoryGitPath(t *testing.T) {
 	tests := []struct {
-		path   string
-		expVal bool
+		path    string
+		wantVal bool
 	}{
-		{path: filepath.Join(".", ".git"), expVal: true},
-		{path: filepath.Join(".", ".git", ""), expVal: true},
-		{path: filepath.Join(".", ".git", "hooks", "pre-commit"), expVal: true},
-		{path: filepath.Join(".git", "hooks"), expVal: true},
-		{path: filepath.Join("dir", ".git"), expVal: true},
+		{path: filepath.Join(".", ".git"), wantVal: true},
+		{path: filepath.Join(".", ".git", ""), wantVal: true},
+		{path: filepath.Join(".", ".git", "hooks", "pre-commit"), wantVal: true},
+		{path: filepath.Join(".git", "hooks"), wantVal: true},
+		{path: filepath.Join("dir", ".git"), wantVal: true},
 
-		{path: filepath.Join(".gitignore"), expVal: false},
-		{path: filepath.Join("dir", ".gitkeep"), expVal: false},
+		{path: filepath.Join(".", ".git."), wantVal: true},
+		{path: filepath.Join(".", ".git.", ""), wantVal: true},
+		{path: filepath.Join(".", ".git.", "hooks", "pre-commit"), wantVal: true},
+		{path: filepath.Join(".git.", "hooks"), wantVal: true},
+		{path: filepath.Join("dir", ".git."), wantVal: true},
+
+		{path: filepath.Join(".gitignore"), wantVal: false},
+		{path: filepath.Join("dir", ".gitkeep"), wantVal: false},
 	}
 	for _, test := range tests {
 		t.Run("", func(t *testing.T) {
-			assert.Equal(t, test.expVal, isRepositoryGitPath(test.path))
+			assert.Equal(t, test.wantVal, isRepositoryGitPath(test.path))
 		})
 	}
 }