diff --git a/tests/fuzz/fuzz-wire-wireaddr_internal.c b/tests/fuzz/fuzz-wire-wireaddr_internal.c new file mode 100644 index 000000000000..7c1cdd6120a8 --- /dev/null +++ b/tests/fuzz/fuzz-wire-wireaddr_internal.c @@ -0,0 +1,42 @@ +#include "config.h" +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_PORT 9735 + +void init(int *argc, char ***argv) +{ + common_setup("fuzzer"); + chainparams = chainparams_for_network("bitcoin"); +} + +void run(const uint8_t *data, size_t size) +{ + char *addr = tal_arr(tmpctx, char, size + 1); + if (!addr) + return; + memcpy(addr, data, size); + addr[size] = '\0'; + + struct wireaddr_internal *wa = tal(tmpctx, struct wireaddr_internal); + const char *err; + + err = parse_wireaddr_internal(tmpctx, addr, DEFAULT_PORT, NULL, wa); + + if (!err) { + u8 *output_buffer = tal_arr(tmpctx, u8, 0); + towire_wireaddr_internal(&output_buffer, wa); + size_t len = tal_bytelen(output_buffer); + + struct wireaddr_internal *decoded_wa = tal(tmpctx, struct wireaddr_internal); + assert(fromwire_wireaddr_internal((const u8 **) &output_buffer, &len, decoded_wa)); + assert(wireaddr_internal_eq(wa, decoded_wa)); + } + + clean_tmpctx(); +}