52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
|
// +build gofuzz
|
||
|
|
||
|
package lnwirefuzz
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"compress/zlib"
|
||
|
"encoding/binary"
|
||
|
|
||
|
"github.com/lightningnetwork/lnd/lnwire"
|
||
|
)
|
||
|
|
||
|
// Fuzz_query_short_chan_ids_zlib is used by go-fuzz.
|
||
|
func Fuzz_query_short_chan_ids_zlib(data []byte) int {
|
||
|
|
||
|
var buf bytes.Buffer
|
||
|
zlibWriter := zlib.NewWriter(&buf)
|
||
|
_, err := zlibWriter.Write(data)
|
||
|
if err != nil {
|
||
|
// Zlib bug?
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
if err := zlibWriter.Close(); err != nil {
|
||
|
// Zlib bug?
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
compressedPayload := buf.Bytes()
|
||
|
|
||
|
chainhash := []byte("00000000000000000000000000000000")
|
||
|
numBytesInBody := len(compressedPayload) + 1
|
||
|
zlibByte := []byte("\x01")
|
||
|
|
||
|
bodyBytes := make([]byte, 2)
|
||
|
binary.BigEndian.PutUint16(bodyBytes, uint16(numBytesInBody))
|
||
|
|
||
|
payload := append(chainhash, bodyBytes...)
|
||
|
payload = append(payload, zlibByte...)
|
||
|
payload = append(payload, compressedPayload...)
|
||
|
|
||
|
// Prefix with MsgQueryShortChanIDs.
|
||
|
payload = prefixWithMsgType(payload, lnwire.MsgQueryShortChanIDs)
|
||
|
|
||
|
// Create an empty message so that the FuzzHarness func can check
|
||
|
// if the max payload constraint is violated.
|
||
|
emptyMsg := lnwire.QueryShortChanIDs{}
|
||
|
|
||
|
// Pass the message into our general fuzz harness for wire messages!
|
||
|
return harness(payload, &emptyMsg)
|
||
|
}
|