Skip to content

Commit 181b3a8

Browse files
lafriksappleboy
authored andcommitted
Fix path cleanup in multiple places (#3871)
1 parent fff022e commit 181b3a8

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

models/repo.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1133,7 +1133,7 @@ type CreateRepoOptions struct {
11331133
}
11341134

11351135
func getRepoInitFile(tp, name string) ([]byte, error) {
1136-
cleanedName := strings.TrimLeft(name, "./")
1136+
cleanedName := strings.TrimLeft(path.Clean("/"+name), "/")
11371137
relPath := path.Join("options", tp, cleanedName)
11381138

11391139
// Use custom file when available.

modules/lfs/server.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ type link struct {
8383
ExpiresAt time.Time `json:"expires_at,omitempty"`
8484
}
8585

86+
var oidRegExp = regexp.MustCompile(`^[A-Fa-f0-9]+$`)
87+
8688
// ObjectOidHandler is the main request routing entry point into LFS server functions
8789
func ObjectOidHandler(ctx *context.Context) {
8890

@@ -217,6 +219,12 @@ func PostHandler(ctx *context.Context) {
217219

218220
if !authenticate(ctx, repository, rv.Authorization, true) {
219221
requireAuth(ctx)
222+
return
223+
}
224+
225+
if !oidRegExp.MatchString(rv.Oid) {
226+
writeStatus(ctx, 404)
227+
return
220228
}
221229

222230
meta, err := models.NewLFSMetaObject(&models.LFSMetaObject{Oid: rv.Oid, Size: rv.Size, RepositoryID: repository.ID})
@@ -284,10 +292,12 @@ func BatchHandler(ctx *context.Context) {
284292
continue
285293
}
286294

287-
// Object is not found
288-
meta, err = models.NewLFSMetaObject(&models.LFSMetaObject{Oid: object.Oid, Size: object.Size, RepositoryID: repository.ID})
289-
if err == nil {
290-
responseObjects = append(responseObjects, Represent(object, meta, meta.Existing, !contentStore.Exists(meta)))
295+
if oidRegExp.MatchString(object.Oid) {
296+
// Object is not found
297+
meta, err = models.NewLFSMetaObject(&models.LFSMetaObject{Oid: object.Oid, Size: object.Size, RepositoryID: repository.ID})
298+
if err == nil {
299+
responseObjects = append(responseObjects, Represent(object, meta, meta.Existing, !contentStore.Exists(meta)))
300+
}
291301
}
292302
}
293303

routers/repo/editor.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func editFilePost(ctx *context.Context, form auth.EditRepoFileForm, isNewFile bo
163163
branchName = form.NewBranchName
164164
}
165165

166-
form.TreePath = strings.Trim(form.TreePath, " /")
166+
form.TreePath = strings.Trim(path.Clean("/"+form.TreePath), " /")
167167
treeNames, treePaths := getParentTreeFields(form.TreePath)
168168

169169
ctx.Data["TreePath"] = form.TreePath
@@ -477,7 +477,7 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
477477
branchName = form.NewBranchName
478478
}
479479

480-
form.TreePath = strings.Trim(form.TreePath, " /")
480+
form.TreePath = strings.Trim(path.Clean("/"+form.TreePath), " /")
481481
treeNames, treePaths := getParentTreeFields(form.TreePath)
482482
if len(treeNames) == 0 {
483483
// We must at least have one element for user to input.

0 commit comments

Comments
 (0)