package dns import ( "testing" ) func FuzzUnpack(f *testing.F) { seed := []byte{ 0x00, 0x01, // ID 0x01, 0x00, // flags: RD=1 0x00, 0x01, // QDCOUNT = 1 0x00, 0x00, // ANCOUNT = 0 0x00, 0x00, // NSCOUNT = 0 0x00, 0x00, // ARCOUNT = 0 0x07, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 0x03, 'c', 'o', 'm', 0x00, // root label 0x00, 0x01, // QTYPE = A 0x00, 0x01, // QCLASS = IN } f.Add(seed) seedResp := []byte{ 0x00, 0x01, // ID 0x85, 0x80, // flags: QR=1, AA=1, RD=1, RA=1 0x00, 0x01, // QDCOUNT = 1 0x00, 0x01, // ANCOUNT = 1 0x00, 0x00, // NSCOUNT = 0 0x00, 0x00, // ARCOUNT = 0 0x03, 'w', 'w', 'w', 0x07, 'e', 'x', 'a', 'm', 'p', 'l', 'e', 0x03, 'c', 'o', 'm', 0x00, 0x00, 0x01, // TYPE = A 0x00, 0x01, // CLASS = IN 0x00, 0x00, 0x00, 0x3C, // TTL = 60 0x00, 0x04, // RDLENGTH = 4 0x01, 0x02, 0x03, 0x04, // 1.2.3.4 } f.Add(seedResp) f.Fuzz(func(t *testing.T, data []byte) { m, err := Unpack(data) if err != nil { return // error is fine; panic is not } _, err = Pack(m) if err != nil { t.Errorf("Pack after Unpack: %v", err) } }) }