diff --git a/roaring/fuzz_test.go b/roaring/fuzz_test.go index 94bd82982..232ebf2f6 100644 --- a/roaring/fuzz_test.go +++ b/roaring/fuzz_test.go @@ -13,49 +13,49 @@ // limitations under the License. package roaring -import ( +import ( "testing" ) func TestUnmarshalBinary(t *testing.T) { b := NewBitmap() confirmedCrashers := []struct { - cr []byte + cr []byte expected string - } { - { // Checks for the zero containers situation - cr : []byte(":0\x000\x01\x00\x00\x000000"), //":000000" - expected : "reading roaring header: malformed bitmap, key-cardinality slice overruns buffer at 12", - }, - { // Checks for int overflow - cr : []byte("<0\x000\x00\x00\x00\x00000000000000" + - "0"), //"<000000000000000" - expected : "unmarshaling as pilosa roaring: Maximum operation size exceeded", - }, - { // The next 5 check for malformed bitmaps - cr : []byte("<0\x0000000000000000000" + - "\x00\x00\xec\x00\x03\x00\x00\x00\xec000"), //"<000000000000000000ÏÏ000" - expected : "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 67372036 containers", - }, - { - cr : []byte("<0\x00\x02\x00\x00\x00\\f\x01\xb5\x8d\x009\v\x01\x00\x00\x00\x00" + - "\x00\x00e\x04\x00\x00\x00\x04\xfd\x00\x01\x00"), //"<0\fµç9e˝" - expected : "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 128625322 containers", + }{ + { // Checks for the zero containers situation + cr: []byte(":0\x000\x01\x00\x00\x000000"), //":000000" + expected: "reading roaring header: malformed bitmap, key-cardinality slice overruns buffer at 12", + }, + { // Checks for int overflow + cr: []byte("<0\x000\x00\x00\x00\x00000000000000" + + "0"), //"<000000000000000" + expected: "unmarshaling as pilosa roaring: Maximum operation size exceeded", + }, + { // The next 5 check for malformed bitmaps + cr: []byte("<0\x0000000000000000000" + + "\x00\x00\xec\x00\x03\x00\x00\x00\xec000"), //"<000000000000000000ÏÏ000" + expected: "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 67372036 containers", }, { - cr : []byte("<0\x00\x02\x00\x00\x00&x.field safe"), //"<0&x.field safe" - expected : "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 53127850 containers", + cr: []byte("<0\x00\x02\x00\x00\x00\\f\x01\xb5\x8d\x009\v\x01\x00\x00\x00\x00" + + "\x00\x00e\x04\x00\x00\x00\x04\xfd\x00\x01\x00"), //"<0\fµç9e˝" + expected: "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 128625322 containers", }, { - cr : []byte("<0\x00\x00\x14\x00\x00\x00\x80\xffp\x05_ 4\x114089" + - "\x00\x00\xff\x000\x00\x02\x00\x00\x00\x00\xff\u007f\x00\x00\x01\x10\x00\x00j" + - "\x02\x00\x00$\x04_\x00\xff\u007f\xff062616163\x00" + //"<0ġp_ 44089ˇ0ˇj$_ˇˇ0626161630ø¸ad$j√" - "0\x00\x02\x00\x01\xbf\x00\x04\x00\xfcad$\x00\x00j\x10\x00\x00\xc3"), - expected : "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 1 containers", + cr: []byte("<0\x00\x02\x00\x00\x00&x.field safe"), //"<0&x.field safe" + expected: "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 53127850 containers", }, - { // 0 containers because the container is partially formed, but not fully (ie. 3/12 = 0) - cr : []byte("<0\x00\x02\x03\x00\x00\x00쳫\v\x00d9\v\x00\x009\v"), //<0쳫 d9 9 - expected : "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 0 containers", + { + cr: []byte("<0\x00\x00\x14\x00\x00\x00\x80\xffp\x05_ 4\x114089" + + "\x00\x00\xff\x000\x00\x02\x00\x00\x00\x00\xff\u007f\x00\x00\x01\x10\x00\x00j" + + "\x02\x00\x00$\x04_\x00\xff\u007f\xff062616163\x00" + //"<0ġp_ 44089ˇ0ˇj$_ˇˇ0626161630ø¸ad$j√" + "0\x00\x02\x00\x01\xbf\x00\x04\x00\xfcad$\x00\x00j\x10\x00\x00\xc3"), + expected: "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 1 containers", + }, + { // 0 containers because the container is partially formed, but not fully (ie. 3/12 = 0) + cr: []byte("<0\x00\x02\x03\x00\x00\x00쳫\v\x00d9\v\x00\x009\v"), //<0쳫 d9 9 + expected: "unmarshaling as pilosa roaring: malformed bitmap, key-cardinality not provided for 0 containers", }, } @@ -63,7 +63,7 @@ func TestUnmarshalBinary(t *testing.T) { err := b.UnmarshalBinary(crash.cr) if err.Error() != crash.expected { t.Errorf("Expected: %s, Got: %s", crash.expected, err) - } + } } - -} \ No newline at end of file + +}