diff --git a/constraints.go b/constraints.go index c94fbc9..2daee9a 100644 --- a/constraints.go +++ b/constraints.go @@ -180,8 +180,13 @@ func init() { ops, cvRegex)) + // The first time a constraint shows up will look slightly different from + // future times it shows up due to a leading space or comma in a given + // string. validConstraintRegex = regexp.MustCompile(fmt.Sprintf( - `^(\s*(%s)\s*(%s)\s*\,?)+$`, + `^(\s*(%s)\s*(%s)\s*)((?:\s+|,\s*)(%s)\s*(%s)\s*)*$`, + ops, + cvRegex, ops, cvRegex)) } diff --git a/constraints_test.go b/constraints_test.go index 477eb98..903cd8c 100644 --- a/constraints_test.go +++ b/constraints_test.go @@ -231,6 +231,15 @@ func TestNewConstraint(t *testing.T) { // The 3 - 4 should be broken into 2 by the range rewriting {"3 - 4 || => 3.0, < 4", 2, 2, false}, + + // Due to having 4 parts these should produce an error. See + // https://github.com/Masterminds/semver/issues/185 for the reason for + // these tests. + {"12.3.4.1234", 0, 0, true}, + {"12.23.4.1234", 0, 0, true}, + {"12.3.34.1234", 0, 0, true}, + {"12.3.34 ~1.2.3", 1, 2, false}, + {"12.3.34~ 1.2.3", 0, 0, true}, } for _, tc := range tests { diff --git a/version_test.go b/version_test.go index a134d7a..b7289eb 100644 --- a/version_test.go +++ b/version_test.go @@ -87,6 +87,13 @@ func TestNewVersion(t *testing.T) { {"1.2.2147483648", false}, {"1.2147483648.3", false}, {"2147483648.3.0", false}, + + // Due to having 4 parts these should produce an error. See + // https://github.com/Masterminds/semver/issues/185 for the reason for + // these tests. + {"12.3.4.1234", true}, + {"12.23.4.1234", true}, + {"12.3.34.1234", true}, } for _, tc := range tests {