Files
UnrealEngine/Engine/Source/ThirdParty/Blosc/c-blosc-1.21.0/tests/fuzz/fuzz_compress.c
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

66 lines
1.3 KiB
C

#include <stdint.h>
#include <stdlib.h>
#include "blosc.h"
#ifdef __cplusplus
extern "C" {
#endif
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
const char *compressors[] = { "blosclz", "lz4", "lz4hc", "snappy", "zlib", "zstd" };
int level = 9, filter = BLOSC_BITSHUFFLE, cindex = 0, i = 0;
size_t nbytes, cbytes, blocksize;
void *output, *input;
blosc_set_nthreads(1);
if (size > 0)
level = data[0] % (9 + 1);
if (size > 1)
filter = data[1] % (BLOSC_BITSHUFFLE + 1);
if (size > 2)
cindex = data[2];
/* Find next available compressor */
while (blosc_set_compressor(compressors[cindex % 6]) == -1 && i < 6) {
cindex++, i++;
}
if (i == 6) {
/* No compressors available */
return 0;
}
if (size > 3 && data[3] % 7 == 0)
blosc_set_blocksize(4096);
if (size > 4)
blosc_set_splitmode(data[4] % BLOSC_FORWARD_COMPAT_SPLIT + 1);
output = malloc(size + 1);
if (output == NULL)
return 0;
if (blosc_compress(level, filter, 1, size, data, output, size) == 0) {
/* Cannot compress src buffer into dest */
free(output);
return 0;
}
blosc_cbuffer_sizes(output, &nbytes, &cbytes, &blocksize);
input = malloc(cbytes);
if (input != NULL) {
blosc_decompress(output, input, cbytes);
free(input);
}
free(output);
return 0;
}
#ifdef __cplusplus
}
#endif