Skip to content

Commit

Permalink
fix: use unix path separator since path already normalized
Browse files Browse the repository at this point in the history
In the case for Windows, this line at
frontend/dockerfile/dockerfile2llb/convert.go#L1142
```go
dest += string(filepath.Separator)
```
was adding the `\\` to a path that is already normalized
to unix-format, hence ending up with dest paths like
`/\\` for `C:\\` and `/test\\` for `C:\\test\\`.

the src paths are well normalized too at ~L1290.

This change removes the block of code and instead
does the "/" appending using the keepSlash logic
that is in system.NormalizePath called in
pathRelativeToWorkingDir() function before.

fixes #4696

Signed-off-by: Anthony Nandaa <[email protected]>
  • Loading branch information
profnandaa committed Apr 11, 2024
1 parent dc23e43 commit 018155f
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 7 deletions.
8 changes: 2 additions & 6 deletions frontend/dockerfile/dockerfile2llb/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -1138,10 +1138,6 @@ func dispatchCopy(d *dispatchState, cfg copyConfig) error {
return err
}

if cfg.params.DestPath == "." || cfg.params.DestPath == "" || cfg.params.DestPath[len(cfg.params.DestPath)-1] == filepath.Separator {
dest += string(filepath.Separator)
}

var copyOpt []llb.CopyOption

if cfg.chown != "" {
Expand Down Expand Up @@ -1562,9 +1558,9 @@ func pathRelativeToWorkingDir(s llb.State, p string, platform ocispecs.Platform)
}

if system.IsAbs(p, platform.OS) {
return system.NormalizePath("/", p, platform.OS, false)
return system.NormalizePath("/", p, platform.OS, true)
}
return system.NormalizePath(dir, p, platform.OS, false)
return system.NormalizePath(dir, p, platform.OS, true)
}

func addEnv(env []string, k, v string) []string {
Expand Down
2 changes: 1 addition & 1 deletion solver/llbsolver/file/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ func docopy(ctx context.Context, src, dest string, action pb.FileActionCopy, u *
}
destPath, err := cleanPath(action.Dest)
if err != nil {
return errors.Wrap(err, "cleaning path")
return errors.Wrap(err, "cleaning destination path")
}
if !action.CreateDestPath {
p, err := fs.RootPath(dest, filepath.Join("/", action.Dest))
Expand Down

0 comments on commit 018155f

Please sign in to comment.