Skip to content

Commit deb971e

Browse files
committed
add more fuzzing
1 parent fc9f538 commit deb971e

File tree

1 file changed

+49
-4
lines changed

1 file changed

+49
-4
lines changed

card_test.go

+49-4
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,58 @@ func TestCard_Revision(t *testing.T) {
391391
}
392392

393393
func TestCard_FieldValue(t *testing.T) {
394-
got := NewFieldValue("geo:1.23,4.56")
395-
if expected := FieldValue("geo:1.23\\,4.56"); got != expected {
396-
t.Errorf("Expected FieldValue to be %q but got %q", expected, got)
394+
fieldValues := map[FieldValue][]string{
395+
"": {""},
396+
",": {"", ""},
397+
"\\,": {","},
398+
",,\\,,": {"", "", ",", ""},
399+
"geo:1.23\\,4.56": {"geo:1.23,4.56"},
400+
"geo:1.23,4.56": {"geo:1.23", "4.56"},
401+
"geo:1\\,23,4\\,56": {"geo:1,23", "4,56"},
402+
}
403+
for fv, parts := range fieldValues {
404+
t.Run(fv.String(), func(t *testing.T) {
405+
gotParts := fv.Values()
406+
if !reflect.DeepEqual(parts, gotParts) {
407+
t.Errorf("Expected parts to be %+v but got %+v", parts, gotParts)
408+
}
409+
410+
gotFV := NewFieldValue(parts...)
411+
if gotFV != fv {
412+
t.Errorf("Expected FieldValue to be %+v but got %+v", fv, gotFV)
413+
}
414+
})
397415
}
398416
}
399417

400-
func FuzzCard_FieldValue(f *testing.F) {
418+
// go test -fuzztime=10s -fuzz=Card_FieldValueRaw
419+
func FuzzCard_FieldValueRaw(f *testing.F) {
420+
f.Add(``)
421+
f.Add(`123`)
422+
f.Add(`1,2,3`)
423+
f.Add(`1\abc`) // missing escaping of "\"
424+
f.Add(`1\,2,3`)
425+
f.Add(`1\\,2,3`)
426+
f.Fuzz(func(t *testing.T, raw string) {
427+
fv := FieldValue(raw)
428+
parts := fv.Values()
429+
got1 := NewFieldValue(parts...)
430+
if got1 != fv {
431+
// the raw value was wrongly escaped:
432+
// "got" should now be correctly escaped
433+
if len(got1) <= len(fv) {
434+
t.Errorf("Expected a larger (escaped) string than %q, got %q", fv, got1)
435+
}
436+
// encode again and check that we get back the same (correctly escaped) raw value
437+
got2 := NewFieldValue(got1.Values()...)
438+
if got1 != got2 {
439+
t.Errorf("Expected %q, got %q", got1, got2)
440+
}
441+
}
442+
})
443+
}
444+
445+
func FuzzCard_FieldValueParts(f *testing.F) {
401446
f.Add("p0", "p1")
402447
f.Add("1,2", "3")
403448
f.Add("1\\,2", "3")

0 commit comments

Comments
 (0)