@@ -191,23 +191,28 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
191
191
var buffer bytes.Buffer
192
192
reader := io .TeeReader (res .Body , & buffer )
193
193
194
+ safePath , err := utilities .SafeJoin (c .Folder , path )
195
+ if err != nil {
196
+ return nil , err
197
+ }
198
+
194
199
// Cleanup
195
- err = os .RemoveAll (filepath . Join ( c . Folder , path ) )
200
+ err = os .RemoveAll (safePath )
196
201
if err != nil {
197
202
return nil , err
198
203
}
199
204
200
205
err = extract .Archive (ctx , reader , c .Folder , rename (path ))
201
206
if err != nil {
202
- os .RemoveAll (path )
207
+ os .RemoveAll (safePath )
203
208
return nil , err
204
209
}
205
210
206
211
sum := sha256 .Sum256 (buffer .Bytes ())
207
212
sumString := "SHA-256:" + hex .EncodeToString (sum [:sha256 .Size ])
208
213
209
214
if sumString != checksum {
210
- os .RemoveAll (path )
215
+ os .RemoveAll (safePath )
211
216
return nil , errors .New ("checksum doesn't match" )
212
217
}
213
218
@@ -249,7 +254,11 @@ func writeInstalled(folder, path string) error {
249
254
// read installed.json
250
255
installed := map [string ]string {}
251
256
252
- data , err := os .ReadFile (filepath .Join (folder , "installed.json" ))
257
+ installedFile , err := utilities .SafeJoin (folder , "installed.json" )
258
+ if err != nil {
259
+ return err
260
+ }
261
+ data , err := os .ReadFile (installedFile )
253
262
if err == nil {
254
263
err = json .Unmarshal (data , & installed )
255
264
if err != nil {
@@ -260,13 +269,17 @@ func writeInstalled(folder, path string) error {
260
269
parts := strings .Split (path , string (filepath .Separator ))
261
270
tool := parts [len (parts )- 2 ]
262
271
toolWithVersion := fmt .Sprint (tool , "-" , parts [len (parts )- 1 ])
263
- installed [tool ] = filepath .Join (folder , path )
264
- installed [toolWithVersion ] = filepath .Join (folder , path )
272
+ toolFile , err := utilities .SafeJoin (folder , path )
273
+ if err != nil {
274
+ return err
275
+ }
276
+ installed [tool ] = toolFile
277
+ installed [toolWithVersion ] = toolFile
265
278
266
279
data , err = json .Marshal (installed )
267
280
if err != nil {
268
281
return err
269
282
}
270
283
271
- return os .WriteFile (filepath . Join ( folder , "installed.json" ) , data , 0644 )
284
+ return os .WriteFile (installedFile , data , 0644 )
272
285
}
0 commit comments