]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modfile: report error for extra text around version
authorJay Conrod <jayconrod@google.com>
Fri, 4 Oct 2019 17:27:49 +0000 (13:27 -0400)
committerJay Conrod <jayconrod@google.com>
Fri, 4 Oct 2019 20:18:48 +0000 (20:18 +0000)
Fixes #34697

Change-Id: Iedfa3d46d558510f3bd1fdf9466cd974793d9ecd
Reviewed-on: https://go-review.googlesource.com/c/go/+/199017
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/cmd/go/internal/modfile/read_test.go
src/cmd/go/internal/modfile/rule.go

index 8cb1a3908c53f268cbb4b6d3217ba1ac0d1ab76e..32401304b999f9d82c5bfec59ea0f0030f3b077f 100644 (file)
@@ -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)
+                       }
+               })
+       }
+}
index 6e1a22f3caa821ac2bc050d8c7054cd48357aac1..e1f2687840399989a661aa4a29ad89e2cc0ce7f3 100644 (file)
@@ -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.