diff options
author | Pablo Mazzini <pmazzini@gmail.com> | 2019-10-11 13:44:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-11 13:44:36 +0100 |
commit | 7cac2b06400c7608c0552462bc34f1856917b12e (patch) | |
tree | 69405fbefbda5374451c6a5090a621009b69d025 /dhcpv6/fuzz.go | |
parent | 651e0846f78086900cc734e93f57e3bc2eca0265 (diff) | |
parent | 2943f69fe4277297a362c156611e9ccc712e834b (diff) |
Merge pull request #325 from Natolumin/fuzz6
dhcpv6: Basic fuzzing support and fixes for discovered bugs
Diffstat (limited to 'dhcpv6/fuzz.go')
-rw-r--r-- | dhcpv6/fuzz.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/dhcpv6/fuzz.go b/dhcpv6/fuzz.go new file mode 100644 index 0000000..3f5afef --- /dev/null +++ b/dhcpv6/fuzz.go @@ -0,0 +1,33 @@ +// +build gofuzz + +package dhcpv6 + +import ( + "bytes" + "fmt" +) + +// Fuzz is an entrypoint for go-fuzz (github.com/dvyukov/go-fuzz) +func Fuzz(data []byte) int { + msg, err := FromBytes(data) + if err != nil { + return 0 + } + + serialized := msg.ToBytes() + if !bytes.Equal(data, serialized) { + rtMsg, err := FromBytes(serialized) + fmt.Printf("Input: %x\n", data) + fmt.Printf("Round-trip: %x\n", serialized) + fmt.Println("Message: ", msg.Summary()) + fmt.Printf("Go repr: %#v\n", msg) + fmt.Println("round-trip reserialized: ", rtMsg.Summary()) + fmt.Printf("Go repr: %#v\n", rtMsg) + if err != nil { + fmt.Printf("failed to parse after deserialize-serialize: %v\n", err) + } + panic("round-trip different") + } + + return 1 +} |