Avoid filepath.Abs
filepath.Abs is surprisingly expensive, it calls os.Getwd every time, which involves multiple syscalls, a lock, and and allocations. Use IsAbs and prefix matching instead. Test: paths_test.go Change-Id: Ia6cf34d6bef24c694702af1e7a6ff08ffd2d822b
This commit is contained in:
@@ -503,16 +503,9 @@ func safePathForSource(ctx PathContext, pathComponents ...string) (SourcePath, e
|
||||
return ret, err
|
||||
}
|
||||
|
||||
abs, err := filepath.Abs(ret.String())
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
buildroot, err := filepath.Abs(ctx.Config().buildDir)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
if strings.HasPrefix(abs, buildroot) {
|
||||
return ret, fmt.Errorf("source path %s is in output", abs)
|
||||
// absolute path already checked by validateSafePath
|
||||
if strings.HasPrefix(ret.String(), ctx.Config().buildDir) {
|
||||
return ret, fmt.Errorf("source path %s is in output", ret.String())
|
||||
}
|
||||
|
||||
return ret, err
|
||||
@@ -526,16 +519,9 @@ func pathForSource(ctx PathContext, pathComponents ...string) (SourcePath, error
|
||||
return ret, err
|
||||
}
|
||||
|
||||
abs, err := filepath.Abs(ret.String())
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
buildroot, err := filepath.Abs(ctx.Config().buildDir)
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
if strings.HasPrefix(abs, buildroot) {
|
||||
return ret, fmt.Errorf("source path %s is in output", abs)
|
||||
// absolute path already checked by validatePath
|
||||
if strings.HasPrefix(ret.String(), ctx.Config().buildDir) {
|
||||
return ret, fmt.Errorf("source path %s is in output", ret.String())
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
|
Reference in New Issue
Block a user