]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: reject relative tmpdir
authorIan Lance Taylor <iant@golang.org>
Wed, 28 Mar 2018 21:12:36 +0000 (14:12 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 28 Mar 2018 23:01:52 +0000 (23:01 +0000)
Fixes #23264

Change-Id: Ib6c343dc8e32949c6de72cb628cace2e8fabc302
Reviewed-on: https://go-review.googlesource.com/103236
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/go/go_test.go
src/cmd/go/internal/work/action.go

index f8975edda53f3931a903aec5ab9325e57f58d2b8..6bf826ad5bf185921e88c999fa83ec069d291f10 100644 (file)
@@ -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")
+       }
+}
index 9f1f8f8a50c58415b7c4ca77ccb7503e07a9bf86..21744de9a3b69add569a3f2ac74da6baa59fd794 100644 (file)
@@ -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)
                }