From b437835241c2437a442a0b9cda0a8e543551db56 Mon Sep 17 00:00:00 2001 From: Matt Morehouse Date: Mon, 21 Aug 2023 15:47:02 -0500 Subject: [PATCH] fuzz: target for init Fuzz the decoding and encoding of init. --- tests/fuzz/fuzz-wire-init.c | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/fuzz/fuzz-wire-init.c diff --git a/tests/fuzz/fuzz-wire-init.c b/tests/fuzz/fuzz-wire-init.c new file mode 100644 index 000000000..85ab63dfb --- /dev/null +++ b/tests/fuzz/fuzz-wire-init.c @@ -0,0 +1,50 @@ +#include "config.h" +#include +#include +#include +#include +#include + +struct init { + u8 *globalfeatures; + u8 *features; + struct tlv_init_tlvs *tlvs; +}; + +static void *encode(const tal_t *ctx, const struct init *s) +{ + return towire_init(ctx, s->globalfeatures, s->features, s->tlvs); +} + +static struct init *decode(const tal_t *ctx, const void *p) +{ + struct init *s = tal(ctx, struct init); + + if (fromwire_init(s, p, &s->globalfeatures, &s->features, &s->tlvs)) + return s; + return tal_free(s); +} + +static bool equal(const struct init *x, const struct init *y) +{ + if (!memeq(x->globalfeatures, tal_bytelen(x->globalfeatures), + y->globalfeatures, tal_bytelen(y->globalfeatures))) + return false; + if (!memeq(x->features, tal_bytelen(x->features), y->features, + tal_bytelen(y->features))) + return false; + + assert(x->tlvs && y->tlvs); + + if (!memeq(x->tlvs->networks, tal_bytelen(x->tlvs->networks), + y->tlvs->networks, tal_bytelen(y->tlvs->networks))) + return false; + + return memeq(x->tlvs->remote_addr, tal_bytelen(x->tlvs->remote_addr), + y->tlvs->remote_addr, tal_bytelen(y->tlvs->remote_addr)); +} + +void run(const u8 *data, size_t size) +{ + test_decode_encode(data, size, WIRE_INIT, struct init); +}