]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: do not try to load 'all' packages with invalid import paths
authorMichael Matloob <matloob@golang.org>
Fri, 16 May 2025 20:40:55 +0000 (16:40 -0400)
committerMichael Matloob <matloob@google.com>
Tue, 20 May 2025 17:51:31 +0000 (10:51 -0700)
Before this change, when we tried to compute the set of packages in
'all', we'd add packages with invalid import paths to the set and try to
load them, which would fail. Instead, do not add them to the list of
packages to load in the second iteration of the loader. We'll still
return errors for invalid imports in the importing packages.
Change-Id: I682229011f555ed1d0c827f79100c1c43bf7f93a
Reviewed-on: https://go-review.googlesource.com/c/go/+/673655
Reviewed-by: Michael Matloob <matloob@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/cmd/go/internal/modload/load.go
src/cmd/go/testdata/script/list_empty_importpath.txt [new file with mode: 0644]

index 6cb6b9e7423694afdd590c67873256903e9182ba..8b2be3b300e9e1351d98c9a0f52b964bedf66434 100644 (file)
@@ -2009,6 +2009,13 @@ func (ld *loader) stdVendor(parentPath, path string) string {
 // starting with a list of the import paths for the packages in the main module.
 func (ld *loader) computePatternAll() (all []string) {
        for _, pkg := range ld.pkgs {
+               if module.CheckImportPath(pkg.path) != nil {
+                       // Don't add packages with invalid paths. This means that
+                       // we don't try to load invalid imports of the main modules'
+                       // packages. We will still report an errors invalid imports
+                       // when we load the importing package.
+                       continue
+               }
                if pkg.flags.has(pkgInAll) && !pkg.isTest() {
                        all = append(all, pkg.path)
                }
diff --git a/src/cmd/go/testdata/script/list_empty_importpath.txt b/src/cmd/go/testdata/script/list_empty_importpath.txt
new file mode 100644 (file)
index 0000000..0960a77
--- /dev/null
@@ -0,0 +1,17 @@
+! go list all
+! stderr 'panic'
+stderr 'invalid import path'
+
+# go list produces a package for 'p' but not for ''
+go list -e all
+cmp stdout wantlist.txt
+-- wantlist.txt --
+example.com/e
+-- go.mod --
+module example.com/e
+
+go 1.25
+-- p.go --
+package p
+
+import ""
\ No newline at end of file