From: Ian Lance Taylor Date: Wed, 28 Mar 2018 21:12:36 +0000 (-0700) Subject: cmd/go: reject relative tmpdir X-Git-Tag: go1.11beta1~1059 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f961272e59ad8fc4ca9912325d2a9fa42b3779de;p=gostls13.git 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 --- 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) }