forked from forgejo/forgejo
Vendor Update Go Libs (#13166)
* update github.com/alecthomas/chroma v0.8.0 -> v0.8.1 * github.com/blevesearch/bleve v1.0.10 -> v1.0.12 * editorconfig-core-go v2.1.1 -> v2.3.7 * github.com/gliderlabs/ssh v0.2.2 -> v0.3.1 * migrate editorconfig.ParseBytes to Parse * github.com/shurcooL/vfsgen to 0d455de96546 * github.com/go-git/go-git/v5 v5.1.0 -> v5.2.0 * github.com/google/uuid v1.1.1 -> v1.1.2 * github.com/huandu/xstrings v1.3.0 -> v1.3.2 * github.com/klauspost/compress v1.10.11 -> v1.11.1 * github.com/markbates/goth v1.61.2 -> v1.65.0 * github.com/mattn/go-sqlite3 v1.14.0 -> v1.14.4 * github.com/mholt/archiver v3.3.0 -> v3.3.2 * github.com/microcosm-cc/bluemonday 4f7140c49acb -> v1.0.4 * github.com/minio/minio-go v7.0.4 -> v7.0.5 * github.com/olivere/elastic v7.0.9 -> v7.0.20 * github.com/urfave/cli v1.20.0 -> v1.22.4 * github.com/prometheus/client_golang v1.1.0 -> v1.8.0 * github.com/xanzy/go-gitlab v0.37.0 -> v0.38.1 * mvdan.cc/xurls v2.1.0 -> v2.2.0 Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
91f2afdb54
commit
12a1f914f4
656 changed files with 52967 additions and 25229 deletions
26
vendor/github.com/mholt/archiver/v3/rar.go
generated
vendored
26
vendor/github.com/mholt/archiver/v3/rar.go
generated
vendored
|
@ -60,6 +60,17 @@ func (*Rar) CheckExt(filename string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// CheckPath ensures that the filename has not been crafted to perform path traversal attacks
|
||||
func (*Rar) CheckPath(to, filename string) error {
|
||||
to, _ = filepath.Abs(to) //explicit the destination folder to prevent that 'string.HasPrefix' check can be 'bypassed' when no destination folder is supplied in input
|
||||
dest := filepath.Join(to, filename)
|
||||
//prevent path traversal attacks
|
||||
if !strings.HasPrefix(dest, to) {
|
||||
return fmt.Errorf("illegal file path: %s", filename)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Unarchive unpacks the .rar file at source to destination.
|
||||
// Destination will be treated as a folder name. It supports
|
||||
// multi-volume archives.
|
||||
|
@ -94,7 +105,7 @@ func (r *Rar) Unarchive(source, destination string) error {
|
|||
break
|
||||
}
|
||||
if err != nil {
|
||||
if r.ContinueOnError {
|
||||
if r.ContinueOnError || strings.Contains(err.Error(), "illegal file path") {
|
||||
log.Printf("[ERROR] Reading file in rar archive: %v", err)
|
||||
continue
|
||||
}
|
||||
|
@ -145,10 +156,18 @@ func (r *Rar) unrarNext(to string) error {
|
|||
if err != nil {
|
||||
return err // don't wrap error; calling loop must break on io.EOF
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
header, ok := f.Header.(*rardecode.FileHeader)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected header to be *rardecode.FileHeader but was %T", f.Header)
|
||||
}
|
||||
|
||||
errPath := r.CheckPath(to, header.Name)
|
||||
if errPath != nil {
|
||||
return fmt.Errorf("checking path traversal attempt: %v", errPath)
|
||||
}
|
||||
|
||||
return r.unrarFile(f, filepath.Join(to, header.Name))
|
||||
}
|
||||
|
||||
|
@ -363,7 +382,9 @@ func (*Rar) Match(file io.ReadSeeker) (bool, error) {
|
|||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
defer file.Seek(currentPos, io.SeekStart)
|
||||
defer func() {
|
||||
_, _ = file.Seek(currentPos, io.SeekStart)
|
||||
}()
|
||||
|
||||
buf := make([]byte, 8)
|
||||
if n, err := file.Read(buf); err != nil || n < 8 {
|
||||
|
@ -402,6 +423,7 @@ var (
|
|||
_ = Extractor(new(Rar))
|
||||
_ = Matcher(new(Rar))
|
||||
_ = ExtensionChecker(new(Rar))
|
||||
_ = FilenameChecker(new(Rar))
|
||||
_ = os.FileInfo(rarFileInfo{})
|
||||
)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue