File tree Expand file tree Collapse file tree 1 file changed +18
-2
lines changed Expand file tree Collapse file tree 1 file changed +18
-2
lines changed Original file line number Diff line number Diff line change @@ -3,8 +3,11 @@ package tgz
3
3
import (
4
4
"archive/tar"
5
5
"compress/gzip"
6
+ "errors"
6
7
"fmt"
7
8
"io"
9
+ "io/fs"
10
+ "math"
8
11
"os"
9
12
10
13
"github.com/go-git/go-billy/v5"
@@ -48,18 +51,31 @@ func zipTarReader(r io.Reader) (*tar.Reader, error) {
48
51
return tar .NewReader (zip ), nil
49
52
}
50
53
54
+ func filemode (mode int64 ) (fs.FileMode , error ) {
55
+ if mode < 0 {
56
+ return 0 , fmt .Errorf ("mode cannot be negative" )
57
+ }
58
+ if mode > math .MaxUint32 {
59
+ return 0 , fmt .Errorf ("mode cannot be greater than max uint32" )
60
+ }
61
+ return os .FileMode (mode ), nil
62
+ }
63
+
51
64
func unTar (fs billy.Filesystem , src * tar.Reader ) error {
52
65
for {
53
66
header , err := src .Next ()
54
67
if err != nil {
55
- if err == io .EOF {
68
+ if errors . Is ( err , io .EOF ) {
56
69
break
57
70
}
58
71
return err
59
72
}
60
73
61
74
dst := header .Name
62
- mode := os .FileMode (header .Mode )
75
+ mode , err := filemode (header .Mode )
76
+ if err != nil {
77
+ return err
78
+ }
63
79
switch header .Typeflag {
64
80
case tar .TypeDir :
65
81
err := fs .MkdirAll (dst , mode )
You can’t perform that action at this time.
0 commit comments