]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: reject embedded files that can't be packed into modules
authorRuss Cox <rsc@golang.org>
Tue, 9 Feb 2021 22:34:09 +0000 (17:34 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 11 Feb 2021 01:10:35 +0000 (01:10 +0000)
If the file won't be packed into a module,
don't put those files into embeds.
Otherwise people will be surprised when things work
locally but not when imported by another module.

Observed on CL 290709

Change-Id: Ia0ef7d0e0f5e42473c2b774e57c843e68a365bc7
Reviewed-on: https://go-review.googlesource.com/c/go/+/290809
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/internal/load/pkg.go

index 3a274a3ad13f61f7514c98073a8d1c7c89d360b5..8b12faf4cd2e51d8665a838c68275dce87cba018 100644 (file)
@@ -36,6 +36,8 @@ import (
        "cmd/go/internal/str"
        "cmd/go/internal/trace"
        "cmd/internal/sys"
+
+       "golang.org/x/mod/module"
 )
 
 var IgnoreImports bool // control whether we ignore imports in packages
@@ -2090,6 +2092,9 @@ func validEmbedPattern(pattern string) bool {
 // can't or won't be included in modules and therefore shouldn't be treated
 // as existing for embedding.
 func isBadEmbedName(name string) bool {
+       if err := module.CheckFilePath(name); err != nil {
+               return true
+       }
        switch name {
        // Empty string should be impossible but make it bad.
        case "":