From f961272e59ad8fc4ca9912325d2a9fa42b3779de Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 28 Mar 2018 14:12:36 -0700 Subject: [PATCH] cmd/go: reject relative tmpdir Fixes #23264 Change-Id: Ib6c343dc8e32949c6de72cb628cace2e8fabc302 Reviewed-on: https://go-review.googlesource.com/103236 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/cmd/go/go_test.go | 23 +++++++++++++++++++++++ src/cmd/go/internal/work/action.go | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index f8975edda5..6bf826ad5b 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -5991,3 +5991,26 @@ func TestDontReportRemoveOfEmptyDir(t *testing.T) { t.Error("unnecessary output when installing installed package") } } + +// Issue 23264. +func TestNoRelativeTmpdir(t *testing.T) { + tg := testgo(t) + defer tg.cleanup() + + tg.tempFile("src/a/a.go", `package a`) + tg.cd(tg.path(".")) + tg.must(os.Mkdir("tmp", 0777)) + + tg.setenv("GOCACHE", "off") + tg.setenv("GOPATH", tg.path(".")) + tg.setenv("GOTMPDIR", "tmp") + tg.runFail("build", "a") + tg.grepStderr("relative tmpdir", "wrong error") + + if runtime.GOOS != "windows" && runtime.GOOS != "plan9" { + tg.unsetenv("GOTMPDIR") + tg.setenv("TMPDIR", "tmp") + tg.runFail("build", "a") + tg.grepStderr("relative tmpdir", "wrong error") + } +} diff --git a/src/cmd/go/internal/work/action.go b/src/cmd/go/internal/work/action.go index 9f1f8f8a50..21744de9a3 100644 --- a/src/cmd/go/internal/work/action.go +++ b/src/cmd/go/internal/work/action.go @@ -223,6 +223,10 @@ func (b *Builder) Init() { if err != nil { base.Fatalf("%s", err) } + if !filepath.IsAbs(b.WorkDir) { + os.RemoveAll(b.WorkDir) + base.Fatalf("cmd/go: relative tmpdir not supported") + } if cfg.BuildX || cfg.BuildWork { fmt.Fprintf(os.Stderr, "WORK=%s\n", b.WorkDir) } -- 2.51.0