@@ -559,6 +559,17 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
559559 ctx .Redirect (ctx .Repo .RepoLink + "/src/branch/" + branchName + "/" + form .TreePath )
560560}
561561
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+
562573// UploadFileToServer upload file to server file dir not git
563574func UploadFileToServer (ctx * context.Context ) {
564575 file , header , err := ctx .Req .FormFile ("file" )
@@ -591,7 +602,13 @@ func UploadFileToServer(ctx *context.Context) {
591602 }
592603 }
593604
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 )
595612 if err != nil {
596613 ctx .Error (500 , fmt .Sprintf ("NewUpload: %v" , err ))
597614 return
0 commit comments