40 lines
549 B
Go
40 lines
549 B
Go
// +build gofuzz
|
|
|
|
package sereal
|
|
|
|
func Fuzz(data []byte) int {
|
|
var m interface{}
|
|
|
|
header, err := readHeader(data)
|
|
if err != nil {
|
|
return 0
|
|
}
|
|
|
|
bodyStart := headerSize + header.suffixSize
|
|
|
|
if bodyStart > len(data) || bodyStart < 0 {
|
|
return 0
|
|
}
|
|
|
|
switch header.version {
|
|
case 1, 2, 3:
|
|
break
|
|
default:
|
|
return 0
|
|
}
|
|
|
|
switch header.doctype {
|
|
case serealRaw:
|
|
break
|
|
case serealSnappy, serealSnappyIncremental, serealZlib:
|
|
// ignore compressed data
|
|
return 0
|
|
}
|
|
|
|
if err := Unmarshal(data, &m); err != nil {
|
|
return 0
|
|
}
|
|
|
|
return 1
|
|
}
|