From 86ea7d5171a5b9a3c2d606444ef9985214fcec71 Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Fri, 4 Oct 2019 13:27:49 -0400 Subject: [PATCH] cmd/go/internal/modfile: report error for extra text around version Fixes #34697 Change-Id: Iedfa3d46d558510f3bd1fdf9466cd974793d9ecd Reviewed-on: https://go-review.googlesource.com/c/go/+/199017 Run-TryBot: Jay Conrod TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills --- src/cmd/go/internal/modfile/read_test.go | 23 +++++++++++++++++++++++ src/cmd/go/internal/modfile/rule.go | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/cmd/go/internal/modfile/read_test.go b/src/cmd/go/internal/modfile/read_test.go index 8cb1a3908c..32401304b9 100644 --- a/src/cmd/go/internal/modfile/read_test.go +++ b/src/cmd/go/internal/modfile/read_test.go @@ -363,3 +363,26 @@ func TestModulePath(t *testing.T) { }) } } + +func TestGoVersion(t *testing.T) { + for _, test := range []struct { + desc, input string + ok bool + }{ + {desc: "empty", input: "module m\ngo \n", ok: false}, + {desc: "one", input: "module m\ngo 1\n", ok: false}, + {desc: "two", input: "module m\ngo 1.22\n", ok: true}, + {desc: "three", input: "module m\ngo 1.22.333", ok: false}, + {desc: "before", input: "module m\ngo v1.2\n", ok: false}, + {desc: "after", input: "module m\ngo 1.2rc1\n", ok: false}, + {desc: "space", input: "module m\ngo 1.2 3.4\n", ok: false}, + } { + t.Run(test.desc, func(t *testing.T) { + if _, err := Parse("go.mod", []byte(test.input), nil); err == nil && !test.ok { + t.Error("unexpected success") + } else if err != nil && test.ok { + t.Errorf("unexpected error: %v", err) + } + }) + } +} diff --git a/src/cmd/go/internal/modfile/rule.go b/src/cmd/go/internal/modfile/rule.go index 6e1a22f3ca..e1f2687840 100644 --- a/src/cmd/go/internal/modfile/rule.go +++ b/src/cmd/go/internal/modfile/rule.go @@ -153,7 +153,7 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (*File return f, nil } -var GoVersionRE = lazyregexp.New(`([1-9][0-9]*)\.(0|[1-9][0-9]*)`) +var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)$`) func (f *File) add(errs *bytes.Buffer, line *Line, verb string, args []string, fix VersionFixer, strict bool) { // If strict is false, this module is a dependency. -- 2.48.1