]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: check go version when parsing go.mod fails
authorSean Liao <sean@liao.dev>
Sat, 28 Dec 2024 16:19:23 +0000 (11:19 -0500)
committerMichael Matloob <matloob@golang.org>
Mon, 13 Jan 2025 19:19:14 +0000 (11:19 -0800)
Fixes #70979

Change-Id: I6597fe178eed34702eea6cba4eec5174c9203458
Reviewed-on: https://go-review.googlesource.com/c/go/+/639115
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/cmd/go/internal/modload/modfile.go
src/cmd/go/testdata/script/mod_unknown_block.txt [new file with mode: 0644]

index 94d2f5bd666cabc3bbff9188f8a6614afc3021f6..4687deae686c89b46a2cace590c3953dc00d7188 100644 (file)
@@ -44,6 +44,17 @@ func ReadModFile(gomod string, fix modfile.VersionFixer) (data []byte, f *modfil
 
        f, err = modfile.Parse(gomod, data, fix)
        if err != nil {
+               f, laxErr := modfile.ParseLax(gomod, data, fix)
+               if laxErr == nil {
+                       if f.Go != nil && gover.Compare(f.Go.Version, gover.Local()) > 0 {
+                               toolchain := ""
+                               if f.Toolchain != nil {
+                                       toolchain = f.Toolchain.Name
+                               }
+                               return nil, nil, &gover.TooNewError{What: base.ShortPath(gomod), GoVersion: f.Go.Version, Toolchain: toolchain}
+                       }
+               }
+
                // Errors returned by modfile.Parse begin with file:line.
                return nil, nil, fmt.Errorf("errors parsing %s:\n%w", base.ShortPath(gomod), shortPathErrorList(err))
        }
diff --git a/src/cmd/go/testdata/script/mod_unknown_block.txt b/src/cmd/go/testdata/script/mod_unknown_block.txt
new file mode 100644 (file)
index 0000000..071269b
--- /dev/null
@@ -0,0 +1,11 @@
+env GOTOOLCHAIN=local
+! go list .
+stderr 'go: go.mod requires go >= 1.999'
+
+
+-- go.mod --
+module example.com
+
+go 1.999
+
+anewblock foo