From c78d215ce38288afe382d38af11b6692ce44c368 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 26 Jun 2020 11:48:37 -0400 Subject: [PATCH] go/build: ignore symlinks to directories when matching source files Fixes #39841 Change-Id: Icbdc37d40e9c10179d6eb704d04482175b139f57 Reviewed-on: https://go-review.googlesource.com/c/go/+/240120 Run-TryBot: Bryan C. Mills TryBot-Result: Gobot Gobot Reviewed-by: Michael Matloob Reviewed-by: Jay Conrod --- .../go/testdata/script/mod_symlink_dotgo.txt | 17 +++++++++++++++++ src/go/build/build.go | 6 ++++++ 2 files changed, 23 insertions(+) create mode 100644 src/cmd/go/testdata/script/mod_symlink_dotgo.txt diff --git a/src/cmd/go/testdata/script/mod_symlink_dotgo.txt b/src/cmd/go/testdata/script/mod_symlink_dotgo.txt new file mode 100644 index 0000000000..d4cc143a36 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_symlink_dotgo.txt @@ -0,0 +1,17 @@ +env GO111MODULE=on +[!symlink] skip + +symlink dir.go -> dir + +# Issue #39841: symlinks to directories should be ignored, not treated as source files. +go list -f '{{range .GoFiles}}{{.}}{{"\n"}}{{end}}' . +stdout 'p\.go$' +! stdout 'dir\.go$' + +-- go.mod -- +module example.com +go 1.15 +-- p.go -- +package p +-- dir/README.txt -- +This file exists to ensure that dir is a directory. diff --git a/src/go/build/build.go b/src/go/build/build.go index 4a5da308a0..39bc3591a7 100644 --- a/src/go/build/build.go +++ b/src/go/build/build.go @@ -793,6 +793,12 @@ Found: if d.IsDir() { continue } + if (d.Mode() & os.ModeSymlink) != 0 { + if fi, err := os.Stat(filepath.Join(p.Dir, d.Name())); err == nil && fi.IsDir() { + // Symlinks to directories are not source files. + continue + } + } name := d.Name() ext := nameExt(name) -- 2.50.0