diff options
author | Chris <ccbrown112@gmail.com> | 2017-09-11 10:02:02 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-11 10:02:02 -0500 |
commit | 402491b7e52c4d836c1274976cdb387852cfd17b (patch) | |
tree | e8adcbdf0af5370f8af11e3fc1021a328c971a5d /utils/extract.go | |
parent | a69bed712d53e9a7984915fffffc8a2fd1647a7a (diff) | |
download | chat-402491b7e52c4d836c1274976cdb387852cfd17b.tar.gz chat-402491b7e52c4d836c1274976cdb387852cfd17b.tar.bz2 chat-402491b7e52c4d836c1274976cdb387852cfd17b.zip |
PLT-7407: Back-end plugins (#7409)
* tie back-end plugins together
* fix comment typo
* add tests and a bit of polish
* tests and polish
* add test, don't let backend executable paths escape the plugin directory
Diffstat (limited to 'utils/extract.go')
-rw-r--r-- | utils/extract.go | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/utils/extract.go b/utils/extract.go index 0559c6ce8..bc8e07f75 100644 --- a/utils/extract.go +++ b/utils/extract.go @@ -13,19 +13,16 @@ import ( ) // ExtractTarGz takes in an io.Reader containing the bytes for a .tar.gz file and -// a destination string to extract to. A list of the file and directory names that -// were extracted is returned. -func ExtractTarGz(gzipStream io.Reader, dst string) ([]string, error) { +// a destination string to extract to. +func ExtractTarGz(gzipStream io.Reader, dst string) error { uncompressedStream, err := gzip.NewReader(gzipStream) if err != nil { - return nil, fmt.Errorf("ExtractTarGz: NewReader failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: NewReader failed: %s", err.Error()) } defer uncompressedStream.Close() tarReader := tar.NewReader(uncompressedStream) - filenames := []string{} - for true { header, err := tarReader.Next() @@ -34,50 +31,46 @@ func ExtractTarGz(gzipStream io.Reader, dst string) ([]string, error) { } if err != nil { - return nil, fmt.Errorf("ExtractTarGz: Next() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Next() failed: %s", err.Error()) } switch header.Typeflag { case tar.TypeDir: if PathTraversesUpward(header.Name) { - return nil, fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") + return fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") } path := filepath.Join(dst, header.Name) if err := os.Mkdir(path, 0744); err != nil && !os.IsExist(err) { - return nil, fmt.Errorf("ExtractTarGz: Mkdir() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Mkdir() failed: %s", err.Error()) } - - filenames = append(filenames, header.Name) case tar.TypeReg: if PathTraversesUpward(header.Name) { - return nil, fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") + return fmt.Errorf("ExtractTarGz: path attempts to traverse upwards") } path := filepath.Join(dst, header.Name) dir := filepath.Dir(path) if err := os.MkdirAll(dir, 0744); err != nil { - return nil, fmt.Errorf("ExtractTarGz: MkdirAll() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: MkdirAll() failed: %s", err.Error()) } - outFile, err := os.Create(path) + outFile, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.FileMode(header.Mode)) if err != nil { - return nil, fmt.Errorf("ExtractTarGz: Create() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Create() failed: %s", err.Error()) } defer outFile.Close() if _, err := io.Copy(outFile, tarReader); err != nil { - return nil, fmt.Errorf("ExtractTarGz: Copy() failed: %s", err.Error()) + return fmt.Errorf("ExtractTarGz: Copy() failed: %s", err.Error()) } - - filenames = append(filenames, header.Name) default: - return nil, fmt.Errorf( + return fmt.Errorf( "ExtractTarGz: unknown type: %v in %v", header.Typeflag, header.Name) } } - return filenames, nil + return nil } |