Skip to content

Commit

Permalink
repo_editor: check upload TreePath and file name (#6838)
Browse files Browse the repository at this point in the history
  • Loading branch information
unknwon committed Mar 13, 2022
1 parent 5aca56d commit 0fef3c9
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions internal/db/repo_editor.go
Expand Up @@ -16,16 +16,18 @@ import (
"strings"
"time"

"github.com/pkg/errors"
gouuid "github.com/satori/go.uuid"
"github.com/unknwon/com"

"github.com/gogs/git-module"

"gogs.io/gogs/internal/conf"
"gogs.io/gogs/internal/cryptoutil"
"gogs.io/gogs/internal/db/errors"
dberrors "gogs.io/gogs/internal/db/errors"
"gogs.io/gogs/internal/gitutil"
"gogs.io/gogs/internal/osutil"
"gogs.io/gogs/internal/pathutil"
"gogs.io/gogs/internal/process"
"gogs.io/gogs/internal/tool"
)
Expand Down Expand Up @@ -134,7 +136,7 @@ func (repo *Repository) UpdateRepoFile(doer *User, opts UpdateRepoFileOptions) (
if opts.OldBranch != opts.NewBranch {
// Directly return error if new branch already exists in the server
if git.RepoHasBranch(repoPath, opts.NewBranch) {
return errors.BranchAlreadyExists{Name: opts.NewBranch}
return dberrors.BranchAlreadyExists{Name: opts.NewBranch}
}

// Otherwise, delete branch from local copy in case out of sync
Expand Down Expand Up @@ -449,11 +451,16 @@ func isRepositoryGitPath(path string) bool {
return strings.HasSuffix(path, ".git") || strings.Contains(path, ".git"+string(os.PathSeparator))
}

func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) (err error) {
func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions) error {
if len(opts.Files) == 0 {
return nil
}

// Prevent uploading files into the ".git" directory
if isRepositoryGitPath(opts.TreePath) {
return errors.Errorf("bad tree path %q", opts.TreePath)
}

uploads, err := GetUploadsByUUIDs(opts.Files)
if err != nil {
return fmt.Errorf("get uploads by UUIDs[%v]: %v", opts.Files, err)
Expand Down Expand Up @@ -487,7 +494,9 @@ func (repo *Repository) UploadRepoFiles(doer *User, opts UploadRepoFileOptions)
continue
}

// Prevent copying files into .git directory, see https://gogs.io/gogs/issues/5558.
upload.Name = pathutil.Clean(upload.Name)

// Prevent uploading files into the ".git" directory
if isRepositoryGitPath(upload.Name) {
continue
}
Expand Down

0 comments on commit 0fef3c9

Please sign in to comment.