@@ -99,25 +99,30 @@ func untar(reader io.Reader, targetDir string, fileFilter func(string) bool) ([]
99
99
// if it's a file create it
100
100
case tar .TypeReg , tar .TypeGNUSparse :
101
101
// tar.Next() will externally only iterate files, so we might have to create intermediate directories here
102
- if err = os .MkdirAll (filepath .Dir (path ), 0750 ); err != nil {
103
- return nil , err
104
- }
105
- file , err := os .OpenFile (path , os .O_CREATE | os .O_TRUNC | os .O_WRONLY , header .FileInfo ().Mode ())
106
- if err != nil {
107
- return nil , err
108
- }
109
- defer file .Close ()
110
-
111
- // copy over contents
112
- // #nosec G110
113
- if _ , err := io .Copy (file , tarReader ); err != nil {
102
+ if err := untarFile (tarReader , header , path ); err != nil {
114
103
return nil , err
115
104
}
116
105
extractedFiles = append (extractedFiles , path )
117
106
}
118
107
}
119
108
}
120
109
110
+ func untarFile (tarReader * tar.Reader , header * tar.Header , path string ) error {
111
+ if err := os .MkdirAll (filepath .Dir (path ), 0750 ); err != nil {
112
+ return err
113
+ }
114
+ file , err := os .OpenFile (path , os .O_CREATE | os .O_TRUNC | os .O_WRONLY , header .FileInfo ().Mode ())
115
+ if err != nil {
116
+ return err
117
+ }
118
+ defer file .Close ()
119
+
120
+ // copy over contents
121
+ // #nosec G110
122
+ _ , err = io .Copy (file , tarReader )
123
+ return err
124
+ }
125
+
121
126
func Unzip (archive , target string ) ([]string , error ) {
122
127
return unzip (archive , target , nil )
123
128
}
@@ -153,29 +158,34 @@ func unzip(archive, target string, fileFilter func(string) bool) ([]string, erro
153
158
continue
154
159
}
155
160
156
- // with a file filter, we may have skipped the intermediate directories, make sure they exist
157
- if err = os .MkdirAll (filepath .Dir (path ), 0750 ); err != nil {
161
+ if err := unzipFile (path , file ); err != nil {
158
162
return nil , err
159
163
}
164
+ extractedFiles = append (extractedFiles , path )
165
+ }
160
166
161
- fileReader , err := file .Open ()
162
- if err != nil {
163
- return nil , err
164
- }
165
- defer fileReader .Close ()
167
+ return extractedFiles , nil
168
+ }
166
169
167
- targetFile , err := os . OpenFile (path , os . O_WRONLY | os . O_CREATE | os . O_TRUNC , file . Mode ())
168
- if err != nil {
169
- return nil , err
170
- }
171
- defer targetFile . Close ()
170
+ func unzipFile (path string , file * zip. File ) error {
171
+ // with a file filter, we may have skipped the intermediate directories, make sure they exist
172
+ if err := os . MkdirAll ( filepath . Dir ( path ), 0750 ); err != nil {
173
+ return err
174
+ }
172
175
173
- // #nosec G110
174
- if _ , err := io .Copy (targetFile , fileReader ); err != nil {
175
- return nil , err
176
- }
177
- extractedFiles = append (extractedFiles , path )
176
+ fileReader , err := file .Open ()
177
+ if err != nil {
178
+ return err
178
179
}
180
+ defer fileReader .Close ()
179
181
180
- return extractedFiles , nil
182
+ targetFile , err := os .OpenFile (path , os .O_WRONLY | os .O_CREATE | os .O_TRUNC , file .Mode ())
183
+ if err != nil {
184
+ return err
185
+ }
186
+ defer targetFile .Close ()
187
+
188
+ // #nosec G110
189
+ _ , err = io .Copy (targetFile , fileReader )
190
+ return err
181
191
}
0 commit comments