github.com/decred/dcrlnd@v0.7.6/fuzz/lnwire/reply_channel_range_zlib.go (about)

     1  //go:build gofuzz
     2  // +build gofuzz
     3  
     4  package lnwirefuzz
     5  
     6  import (
     7  	"bytes"
     8  	"compress/zlib"
     9  	"encoding/binary"
    10  
    11  	"github.com/decred/dcrlnd/lnwire"
    12  )
    13  
    14  // Fuzz_reply_channel_range_zlib is used by go-fuzz.
    15  func Fuzz_reply_channel_range_zlib(data []byte) int {
    16  
    17  	var buf bytes.Buffer
    18  	zlibWriter := zlib.NewWriter(&buf)
    19  	_, err := zlibWriter.Write(data)
    20  	if err != nil {
    21  		// Zlib bug?
    22  		panic(err)
    23  	}
    24  
    25  	if err := zlibWriter.Close(); err != nil {
    26  		// Zlib bug?
    27  		panic(err)
    28  	}
    29  
    30  	compressedPayload := buf.Bytes()
    31  
    32  	// Initialize some []byte vars which will prefix our payload
    33  	chainhash := []byte("00000000000000000000000000000000")
    34  	firstBlockHeight := []byte("\x00\x00\x00\x00")
    35  	numBlocks := []byte("\x00\x00\x00\x00")
    36  	completeByte := []byte("\x00")
    37  
    38  	numBytesInBody := len(compressedPayload) + 1
    39  	zlibByte := []byte("\x01")
    40  
    41  	bodyBytes := make([]byte, 2)
    42  	binary.BigEndian.PutUint16(bodyBytes, uint16(numBytesInBody))
    43  
    44  	payload := append(chainhash, firstBlockHeight...)
    45  	payload = append(payload, numBlocks...)
    46  	payload = append(payload, completeByte...)
    47  	payload = append(payload, bodyBytes...)
    48  	payload = append(payload, zlibByte...)
    49  	payload = append(payload, compressedPayload...)
    50  
    51  	// Prefix with MsgReplyChannelRange.
    52  	payload = prefixWithMsgType(payload, lnwire.MsgReplyChannelRange)
    53  
    54  	// Pass the message into our general fuzz harness for wire messages!
    55  	return harness(payload)
    56  }