From c726361fff936c3483bea3cc04fecab145a55caa Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 18 Nov 2019 09:01:44 -0500 Subject: [PATCH] cmd/go: fail tests immediately if they attempt to create a tempfile within GOROOT This will help to detect regressions of #28387 when running 'go test cmd/go' in a writable GOROOT. Updates #28387 Updates #30316 Change-Id: I551e044111535404688b1a76e63163dfcb41bb5c Reviewed-on: https://go-review.googlesource.com/c/go/+/207701 Run-TryBot: Bryan C. Mills Reviewed-by: Jay Conrod Reviewed-by: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/cmd/go/go_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index aaeb42d98c8..c5c5d411b9b 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -683,8 +683,11 @@ func (tg *testgoData) creatingTemp(path string) { // If we have changed the working directory, make sure we have // an absolute path, because we are going to change directory // back before we remove the temporary. - if tg.wd != "" && !filepath.IsAbs(path) { - path = filepath.Join(tg.pwd(), path) + if !filepath.IsAbs(path) { + if tg.wd == "" || strings.HasPrefix(tg.wd, testGOROOT) { + tg.t.Fatalf("internal testsuite error: creatingTemp(%q) within GOROOT/src", path) + } + path = filepath.Join(tg.wd, path) } tg.must(robustio.RemoveAll(path)) tg.temps = append(tg.temps, path)