Skip to content

Commit cdac540

Browse files
committed
use SafeJoin on tools Install handler
1 parent da8e8b4 commit cdac540

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

v2/pkgs/tools.go

+20-7
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)