21
21
size_t const partialCapacity = FUZZ_getRange_from_uint32(partialCapacitySeed, 0, size);
22
22
size_t const dstCapacity = LZ4_compressBound(size);
24
char* const dst = (char*)malloc(dstCapacity);
23
size_t const largeSize = 64 * 1024 - 1;
24
size_t const smallSize = 1024;
25
char* const dstPlusLargePrefix = (char*)malloc(dstCapacity + largeSize);
26
FUZZ_ASSERT(dstPlusLargePrefix);
27
char* const dstPlusSmallPrefix = dstPlusLargePrefix + largeSize - smallSize;
28
char* const largeDict = (char*)malloc(largeSize);
29
FUZZ_ASSERT(largeDict);
30
char* const smallDict = largeDict + largeSize - smallSize;
31
char* const dst = dstPlusLargePrefix + largeSize;
25
32
char* const rt = (char*)malloc(size);
30
35
/* Compression must succeed and round trip correctly. */
47
52
FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
55
/* Partial decompression using dict with no dict. */
57
char* const partial = (char*)malloc(partialCapacity);
59
int const partialSize = LZ4_decompress_safe_partial_usingDict(
60
dst, partial, dstSize, partialCapacity, partialCapacity, NULL, 0);
61
FUZZ_ASSERT(partialSize >= 0);
62
FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
63
FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
66
/* Partial decompression using dict with small prefix as dict */
68
char* const partial = (char*)malloc(partialCapacity);
70
int const partialSize = LZ4_decompress_safe_partial_usingDict(
71
dst, partial, dstSize, partialCapacity, partialCapacity, dstPlusSmallPrefix, smallSize);
72
FUZZ_ASSERT(partialSize >= 0);
73
FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
74
FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
77
/* Partial decompression using dict with large prefix as dict */
79
char* const partial = (char*)malloc(partialCapacity);
81
int const partialSize = LZ4_decompress_safe_partial_usingDict(
82
dst, partial, dstSize, partialCapacity, partialCapacity, dstPlusLargePrefix, largeSize);
83
FUZZ_ASSERT(partialSize >= 0);
84
FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
85
FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
88
/* Partial decompression using dict with small external dict */
90
char* const partial = (char*)malloc(partialCapacity);
92
int const partialSize = LZ4_decompress_safe_partial_usingDict(
93
dst, partial, dstSize, partialCapacity, partialCapacity, smallDict, smallSize);
94
FUZZ_ASSERT(partialSize >= 0);
95
FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
96
FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
99
/* Partial decompression using dict with large external dict */
101
char* const partial = (char*)malloc(partialCapacity);
102
FUZZ_ASSERT(partial);
103
int const partialSize = LZ4_decompress_safe_partial_usingDict(
104
dst, partial, dstSize, partialCapacity, partialCapacity, largeDict, largeSize);
105
FUZZ_ASSERT(partialSize >= 0);
106
FUZZ_ASSERT_MSG(partialSize == partialCapacity, "Incorrect size");
107
FUZZ_ASSERT_MSG(!memcmp(data, partial, partialSize), "Corruption!");
111
free(dstPlusLargePrefix);
54
114
FUZZ_dataProducer_free(producer);