Browse Source

fuzz: add a fuzz target for common/bigsize

Signed-off-by: Antoine Poinsot <darosior@protonmail.com>
travis-experimental
Antoine Poinsot 4 years ago
committed by Christian Decker
parent
commit
a89a018475
  1. 36
      tests/fuzz/fuzz-bigsize.c
  2. 17
      tests/fuzz/libfuzz.c

36
tests/fuzz/fuzz-bigsize.c

@ -0,0 +1,36 @@
#include <assert.h>
#include <stdint.h>
#include <string.h>
#include <tests/fuzz/libfuzz.h>
#include <ccan/tal/tal.h>
#include <common/bigsize.h>
void init(int *argc, char ***argv)
{
}
void run(const uint8_t *data, size_t size)
{
uint8_t *wire_buff, buff[BIGSIZE_MAX_LEN];
const uint8_t **wire_chunks, *wire_ptr;
size_t wire_max;
wire_chunks = get_chunks(NULL, data, size, 8);
for (size_t i = 0; i < tal_count(wire_chunks); i++) {
wire_max = tal_count(wire_chunks[i]);
wire_ptr = wire_chunks[i];
bigsize_t bs = fromwire_bigsize(&wire_ptr, &wire_max);
if (bs != 0) {
/* We have a valid bigsize type, now we should not error. */
assert(bigsize_put(buff, bs) > 0);
assert(bigsize_len(bs));
wire_buff = tal_arr(NULL, uint8_t, 8);
towire_bigsize(&wire_buff, bs);
tal_free(wire_buff);
}
}
tal_free(wire_chunks);
}

17
tests/fuzz/libfuzz.c

@ -1,5 +1,9 @@
#include <tests/fuzz/libfuzz.h>
#include <ccan/tal/tal.h>
#include <common/utils.h>
#include <string.h>
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerInitialize(int *argc, char ***argv);
@ -14,3 +18,16 @@ int LLVMFuzzerInitialize(int *argc, char ***argv) {
return 0;
}
const uint8_t **get_chunks(const void *ctx, const uint8_t *data,
size_t data_size, size_t chunk_size)
{
size_t n_chunks = data_size / chunk_size;
const uint8_t **chunks = tal_arr(ctx, const uint8_t *, n_chunks);
for (size_t i = 0; i < n_chunks; i++)
chunks[i] = tal_dup_arr(chunks, const uint8_t,
data + i * chunk_size, chunk_size, 0);
return chunks;
}

Loading…
Cancel
Save