@@ -191,23 +191,28 @@ func (c *Tools) install(ctx context.Context, path, url, checksum string) (*tools
191191 var buffer bytes.Buffer
192192 reader := io .TeeReader (res .Body , & buffer )
193193
194+ safePath , err := utilities .SafeJoin (c .Folder , path )
195+ if err != nil {
196+ return nil , err
197+ }
198+
194199 // Cleanup
195- err = os .RemoveAll (filepath . Join ( c . Folder , path ) )
200+ err = os .RemoveAll (safePath )
196201 if err != nil {
197202 return nil , err
198203 }
199204
200205 err = extract .Archive (ctx , reader , c .Folder , rename (path ))
201206 if err != nil {
202- os .RemoveAll (path )
207+ os .RemoveAll (safePath )
203208 return nil , err
204209 }
205210
206211 sum := sha256 .Sum256 (buffer .Bytes ())
207212 sumString := "SHA-256:" + hex .EncodeToString (sum [:sha256 .Size ])
208213
209214 if sumString != checksum {
210- os .RemoveAll (path )
215+ os .RemoveAll (safePath )
211216 return nil , errors .New ("checksum doesn't match" )
212217 }
213218
@@ -249,7 +254,11 @@ func writeInstalled(folder, path string) error {
249254 // read installed.json
250255 installed := map [string ]string {}
251256
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 )
253262 if err == nil {
254263 err = json .Unmarshal (data , & installed )
255264 if err != nil {
@@ -260,13 +269,17 @@ func writeInstalled(folder, path string) error {
260269 parts := strings .Split (path , string (filepath .Separator ))
261270 tool := parts [len (parts )- 2 ]
262271 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
265278
266279 data , err = json .Marshal (installed )
267280 if err != nil {
268281 return err
269282 }
270283
271- return os .WriteFile (filepath . Join ( folder , "installed.json" ) , data , 0644 )
284+ return os .WriteFile (installedFile , data , 0644 )
272285}
0 commit comments