From 10aede26d0603c16f6f66c87a84bccfeb2e0c8e0 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 12 Mar 2019 16:21:43 +0100 Subject: [PATCH] misc/android: fix detection of GOROOT tests strings.HasPrefix is not good enough to determine whether a path is a subdirectory of another because it does not respect path boundaries. filepath.Rel is good eonugh as long as we filter out results that use parent directories, "..". Hopefully fix the android emulator builders on the subrepositories. Change-Id: I17ee7e0028c0b0b26a6c5f67629f53c9a660c6e5 Reviewed-on: https://go-review.googlesource.com/c/go/+/167117 Run-TryBot: Elias Naur Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- misc/android/go_android_exec.go | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/misc/android/go_android_exec.go b/misc/android/go_android_exec.go index a662d28944..ee3f16ae3d 100644 --- a/misc/android/go_android_exec.go +++ b/misc/android/go_android_exec.go @@ -196,12 +196,10 @@ func subdir() (pkgpath string, underGoRoot bool, err error) { if err != nil { return "", false, err } - if strings.HasPrefix(cwd, goroot) { - subdir, err := filepath.Rel(goroot, cwd) - if err != nil { - return "", false, err + if subdir, err := filepath.Rel(goroot, cwd); err == nil { + if !strings.Contains(subdir, "..") { + return subdir, true, nil } - return subdir, true, nil } for _, p := range filepath.SplitList(build.Default.GOPATH) { @@ -209,12 +207,10 @@ func subdir() (pkgpath string, underGoRoot bool, err error) { if err != nil { return "", false, err } - if !strings.HasPrefix(cwd, pabs) { - continue - } - subdir, err := filepath.Rel(pabs, cwd) - if err == nil { - return subdir, false, nil + if subdir, err := filepath.Rel(pabs, cwd); err == nil { + if !strings.Contains(subdir, "..") { + return subdir, false, nil + } } } return "", false, fmt.Errorf("the current path %q is not in either GOROOT(%q) or GOPATH(%q)", -- 2.50.0