lz4
1/**
2* This fuzz target performs a lz4 round-trip test (compress & decompress),
3* compares the result with the original, and calls abort() on corruption.
4*/
5
6#include <stddef.h>7#include <stdint.h>8#include <stdlib.h>9#include <string.h>10
11#include "fuzz_helpers.h"12#include "fuzz_data_producer.h"13#include "lz4.h"14#include "lz4hc.h"15
16int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)17{
18FUZZ_dataProducer_t *producer = FUZZ_dataProducer_create(data, size);19int const level = FUZZ_dataProducer_range32(producer,20LZ4HC_CLEVEL_MIN, LZ4HC_CLEVEL_MAX);21size = FUZZ_dataProducer_remainingBytes(producer);22
23size_t const dstCapacity = LZ4_compressBound(size);24char* const dst = (char*)malloc(dstCapacity);25char* const rt = (char*)malloc(size);26
27FUZZ_ASSERT(dst);28FUZZ_ASSERT(rt);29
30/* Compression must succeed and round trip correctly. */31int const dstSize = LZ4_compress_HC((const char*)data, dst, size,32dstCapacity, level);33FUZZ_ASSERT(dstSize > 0);34
35int const rtSize = LZ4_decompress_safe(dst, rt, dstSize, size);36FUZZ_ASSERT_MSG(rtSize == size, "Incorrect size");37FUZZ_ASSERT_MSG(!memcmp(data, rt, size), "Corruption!");38
39free(dst);40free(rt);41FUZZ_dataProducer_free(producer);42
43return 0;44}
45