Skip to content

Commit 39629b1

Browse files
committed
Fixed bug found by fuzzing
1 parent 634f2c8 commit 39629b1

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

parser.go

+18-15
Original file line numberDiff line numberDiff line change
@@ -222,23 +222,26 @@ func Parse(inVersioin string) (*Version, error) {
222222

223223
// Builds parsing
224224
buildIdx := currIdx + 1
225-
for {
226-
if hasNext := next(); !hasNext || curr == '.' {
227-
if buildIdx == currIdx {
228-
return nil, fmt.Errorf("empty build tag not allowed")
225+
if curr == '+' {
226+
for {
227+
if hasNext := next(); !hasNext || curr == '.' {
228+
if buildIdx == currIdx {
229+
return nil, fmt.Errorf("empty build tag not allowed")
230+
}
231+
result.builds = append(result.builds, in[buildIdx:currIdx])
232+
if !hasNext {
233+
return result, nil
234+
}
235+
236+
// Multiple builds
237+
buildIdx = currIdx + 1
238+
continue
229239
}
230-
result.builds = append(result.builds, in[buildIdx:currIdx])
231-
if !hasNext {
232-
return result, nil
240+
if identifier[curr] {
241+
continue
233242
}
234-
235-
// Multiple builds
236-
buildIdx = currIdx + 1
237-
continue
238-
}
239-
if identifier[curr] {
240-
continue
243+
return nil, fmt.Errorf("invalid separator for builds: '%c'", curr)
241244
}
242-
return nil, fmt.Errorf("invalid separator for builds: '%c'", curr)
243245
}
246+
return nil, fmt.Errorf("invalid separator: '%c'", curr)
244247
}

parser_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ func TestParser(t *testing.T) {
4444
}
4545

4646
valid("", "0.0.0", ",,")
47+
invalid("0.0.0.0")
4748
invalid("a")
4849
invalid(".")
4950
invalid("-ab")

0 commit comments

Comments
 (0)