summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/lz4.c1
-rw-r--r--tests/fuzzer.c17
2 files changed, 14 insertions, 4 deletions
diff --git a/lib/lz4.c b/lib/lz4.c
index 2222d53..d21eef4 100644
--- a/lib/lz4.c
+++ b/lib/lz4.c
@@ -1236,6 +1236,7 @@ LZ4_FORCE_INLINE int LZ4_compress_generic(
if ((U32)srcSize > (U32)LZ4_MAX_INPUT_SIZE) { return 0; } /* Unsupported srcSize, too large (or negative) */
if (srcSize == 0) { /* src == NULL supported if srcSize == 0 */
+ if (outputDirective != notLimited && dstCapacity <= 0) return 0; /* no output, can't write anything */
DEBUGLOG(5, "Generating an empty block");
assert(outputDirective == notLimited || dstCapacity >= 1);
assert(dst != NULL);
diff --git a/tests/fuzzer.c b/tests/fuzzer.c
index 1d8b5f6..4dbf6a7 100644
--- a/tests/fuzzer.c
+++ b/tests/fuzzer.c
@@ -1056,15 +1056,24 @@ static void FUZ_unitTests(int compressionLevel)
} }
- /* useful to trigger undefined sanitizer */
- DISPLAYLEVEL(3, "LZ4_compress_default() with NULL input \n");
+ /* to be tested with undefined sanitizer */
+ DISPLAYLEVEL(3, "LZ4_compress_default() with NULL input:");
{ int const maxCSize = LZ4_compressBound(0);
int const cSize = LZ4_compress_default(NULL, testCompressed, 0, maxCSize);
FUZ_CHECKTEST(!(cSize==1 && testCompressed[0]==0),
"compressing empty should give byte 0"
- " (maxCSize == %u) (cSize == %u)",
- (unsigned)maxCSize, (unsigned)cSize);
+ " (maxCSize == %i) (cSize == %i) (byte == 0x%02X)",
+ maxCSize, cSize, testCompressed[0]);
}
+ DISPLAYLEVEL(3, " OK \n");
+
+ DISPLAYLEVEL(3, "LZ4_compress_default() with both NULL input and output:");
+ { int const cSize = LZ4_compress_default(NULL, NULL, 0, 0);
+ FUZ_CHECKTEST(cSize != 0,
+ "compressing into NULL must fail"
+ " (cSize == %i != 0)", cSize);
+ }
+ DISPLAYLEVEL(3, " OK \n");
/* in-place compression test */
DISPLAYLEVEL(3, "in-place compression using LZ4_compress_default() :");