Browse Source

Check for leading zeroes

Benedikt Lang 12 years ago
parent
commit
e030971c62
2 changed files with 33 additions and 0 deletions
  1. +22
    -0
      semver.go
  2. +11
    -0
      semver_test.go

+ 22
- 0
semver.go View File

@ -189,6 +189,9 @@ func Parse(s string) (*Version, error) {
if !containsOnly(parts[0], NUMBERS) { if !containsOnly(parts[0], NUMBERS) {
return nil, fmt.Errorf("Invalid character(s) found in major number %q", parts[0]) return nil, fmt.Errorf("Invalid character(s) found in major number %q", parts[0])
} }
if hasLeadingZeroes(parts[0]) {
return nil, fmt.Errorf("Major number must not contain leading zeroes %q", parts[0])
}
major, err := strconv.ParseUint(parts[0], 10, 64) major, err := strconv.ParseUint(parts[0], 10, 64)
if err != nil { if err != nil {
return nil, err return nil, err
@ -198,6 +201,9 @@ func Parse(s string) (*Version, error) {
if !containsOnly(parts[1], NUMBERS) { if !containsOnly(parts[1], NUMBERS) {
return nil, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1]) return nil, fmt.Errorf("Invalid character(s) found in minor number %q", parts[1])
} }
if hasLeadingZeroes(parts[1]) {
return nil, fmt.Errorf("Minor number must not contain leading zeroes %q", parts[1])
}
minor, err := strconv.ParseUint(parts[1], 10, 64) minor, err := strconv.ParseUint(parts[1], 10, 64)
if err != nil { if err != nil {
return nil, err return nil, err
@ -227,6 +233,9 @@ func Parse(s string) (*Version, error) {
if !containsOnly(parts[2][:subVersionIndex], NUMBERS) { if !containsOnly(parts[2][:subVersionIndex], NUMBERS) {
return nil, fmt.Errorf("Invalid character(s) found in patch number %q", parts[2][:subVersionIndex]) return nil, fmt.Errorf("Invalid character(s) found in patch number %q", parts[2][:subVersionIndex])
} }
if hasLeadingZeroes(parts[2][:subVersionIndex]) {
return nil, fmt.Errorf("Patch number must not contain leading zeroes %q", parts[2][:subVersionIndex])
}
patch, err := strconv.ParseUint(parts[2][:subVersionIndex], 10, 64) patch, err := strconv.ParseUint(parts[2][:subVersionIndex], 10, 64)
if err != nil { if err != nil {
return nil, err return nil, err
@ -286,6 +295,9 @@ func NewPRVersion(s string) (*PRVersion, error) {
} }
v := &PRVersion{} v := &PRVersion{}
if containsOnly(s, NUMBERS) { if containsOnly(s, NUMBERS) {
if hasLeadingZeroes(s) {
return nil, fmt.Errorf("Numeric PreRelease version must not contain leading zeroes %q", s)
}
num, err := strconv.ParseUint(s, 10, 64) num, err := strconv.ParseUint(s, 10, 64)
// Might never be hit, but just in case // Might never be hit, but just in case
@ -350,6 +362,16 @@ func containsOnly(s string, set string) bool {
}) == -1 }) == -1
} }
func hasLeadingZeroes(s string) bool {
if len(s) <= 1 {
return false
}
if s[0] == '0' {
return true
}
return false
}
// Creates a new valid build version // Creates a new valid build version
func NewBuildVersion(s string) (string, error) { func NewBuildVersion(s string) (string, error) {
if len(s) == 0 { if len(s) == 0 {


+ 11
- 0
semver_test.go View File

@ -129,6 +129,17 @@ var wrongformatTests = []wrongformatTest{
{nil, "-1.1.1"}, {nil, "-1.1.1"},
{nil, "1.-1.1"}, {nil, "1.-1.1"},
{nil, "1.1.-1"}, {nil, "1.1.-1"},
// Leading zeroes
{nil, "01.1.1"},
{nil, "001.1.1"},
{nil, "1.01.1"},
{nil, "1.001.1"},
{nil, "1.1.01"},
{nil, "1.1.001"},
{nil, "1.1.1-01"},
{nil, "1.1.1-001"},
{nil, "1.1.1-beta.01"},
{nil, "1.1.1-beta.001"},
{&Version{0, 0, 0, []*PRVersion{prstr("!")}, nil}, "0.0.0-!"}, {&Version{0, 0, 0, []*PRVersion{prstr("!")}, nil}, "0.0.0-!"},
{&Version{0, 0, 0, nil, []string{"!"}}, "0.0.0+!"}, {&Version{0, 0, 0, nil, []string{"!"}}, "0.0.0+!"},
// empty prversion // empty prversion


Loading…
Cancel
Save