@@ -559,6 +559,17 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
559
559
ctx .Redirect (ctx .Repo .RepoLink + "/src/branch/" + branchName + "/" + form .TreePath )
560
560
}
561
561
562
+ func cleanUploadFileName (name string ) string {
563
+ name = strings .TrimLeft (name , "./\\ " )
564
+ name = strings .Replace (name , "../" , "" , - 1 )
565
+ name = strings .Replace (name , "..\\ " , "" , - 1 )
566
+ name = strings .TrimPrefix (path .Clean (name ), ".git/" )
567
+ if name == ".git" {
568
+ return ""
569
+ }
570
+ return name
571
+ }
572
+
562
573
// UploadFileToServer upload file to server file dir not git
563
574
func UploadFileToServer (ctx * context.Context ) {
564
575
file , header , err := ctx .Req .FormFile ("file" )
@@ -591,7 +602,13 @@ func UploadFileToServer(ctx *context.Context) {
591
602
}
592
603
}
593
604
594
- upload , err := models .NewUpload (header .Filename , buf , file )
605
+ name := cleanUploadFileName (header .Filename )
606
+ if len (name ) == 0 {
607
+ ctx .Error (500 , "Upload file name is invalid" )
608
+ return
609
+ }
610
+
611
+ upload , err := models .NewUpload (name , buf , file )
595
612
if err != nil {
596
613
ctx .Error (500 , fmt .Sprintf ("NewUpload: %v" , err ))
597
614
return
0 commit comments