36 lines
652 B
Go
36 lines
652 B
Go
|
// +build gofuzz
|
||
|
|
||
|
package cpio
|
||
|
|
||
|
import "bytes"
|
||
|
import "io"
|
||
|
|
||
|
// Fuzz tests the parsing and error handling of random byte arrays using
|
||
|
// https://github.com/dvyukov/go-fuzz.
|
||
|
func Fuzz(data []byte) int {
|
||
|
r := NewReader(bytes.NewReader(data))
|
||
|
h := NewHash()
|
||
|
for {
|
||
|
hdr, err := r.Next()
|
||
|
if err != nil {
|
||
|
if hdr != nil {
|
||
|
panic("hdr != nil on error")
|
||
|
}
|
||
|
if err == io.EOF {
|
||
|
// everything worked with random input... interesting
|
||
|
return 1
|
||
|
}
|
||
|
// error returned for random input. Good!
|
||
|
return -1
|
||
|
}
|
||
|
|
||
|
// hash file
|
||
|
h.Reset()
|
||
|
io.CopyN(h, r, hdr.Size)
|
||
|
h.Sum32()
|
||
|
|
||
|
// convert file header
|
||
|
FileInfoHeader(hdr.FileInfo())
|
||
|
}
|
||
|
}
|