aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Collet <Cyan4973@users.noreply.github.com>2024-03-21 10:41:34 -0700
committerGitHub <noreply@github.com>2024-03-21 10:41:34 -0700
commit1d3f664fceb478418460206b263e8f782f2eb724 (patch)
treeb439cd6bdbcfeb4e0a851807c568edbde4049488
parent86caab507fcc07ef3786b04daced44bd2591bd23 (diff)
parent3487a60950ea01e89883a3e807a18a6e155768b7 (diff)
downloadzstd-1d3f664fceb478418460206b263e8f782f2eb724.tar.gz
Merge pull request #3979 from yoniko/Werror-fuzz
Fail on errors when building fuzzers
-rwxr-xr-xtests/fuzz/fuzz.py7
-rw-r--r--tests/fuzz/fuzz_data_producer.c10
-rw-r--r--tests/fuzz/regression_driver.c3
-rw-r--r--tests/fuzz/simple_decompress.c21
-rw-r--r--tests/fuzz/stream_round_trip.c2
5 files changed, 25 insertions, 18 deletions
diff --git a/tests/fuzz/fuzz.py b/tests/fuzz/fuzz.py
index d6b99171..d59df926 100755
--- a/tests/fuzz/fuzz.py
+++ b/tests/fuzz/fuzz.py
@@ -407,7 +407,12 @@ def build(args):
cxxflags = shlex.split(args.cxxflags)
mflags = shlex.split(args.mflags)
# Flags to be added to both cflags and cxxflags
- common_flags = []
+ common_flags = [
+ '-Werror',
+ '-Wno-error=declaration-after-statement',
+ '-Wno-error=c++-compat',
+ '-Wno-error=deprecated' # C files are sometimes compiled with CXX
+ ]
cppflags += [
'-DDEBUGLEVEL={}'.format(args.debug),
diff --git a/tests/fuzz/fuzz_data_producer.c b/tests/fuzz/fuzz_data_producer.c
index bf846b68..056de3ee 100644
--- a/tests/fuzz/fuzz_data_producer.c
+++ b/tests/fuzz/fuzz_data_producer.c
@@ -28,12 +28,12 @@ void FUZZ_dataProducer_free(FUZZ_dataProducer_t *producer) { free(producer); }
uint32_t FUZZ_dataProducer_uint32Range(FUZZ_dataProducer_t *producer, uint32_t min,
uint32_t max) {
- FUZZ_ASSERT(min <= max);
-
uint32_t range = max - min;
uint32_t rolling = range;
uint32_t result = 0;
+ FUZZ_ASSERT(min <= max);
+
while (rolling > 0 && producer->size > 0) {
uint8_t next = *(producer->data + producer->size - 1);
producer->size -= 1;
@@ -79,11 +79,11 @@ int FUZZ_dataProducer_empty(FUZZ_dataProducer_t *producer) {
size_t FUZZ_dataProducer_contract(FUZZ_dataProducer_t *producer, size_t newSize)
{
- newSize = newSize > producer->size ? producer->size : newSize;
+ const size_t effectiveNewSize = newSize > producer->size ? producer->size : newSize;
- size_t remaining = producer->size - newSize;
+ size_t remaining = producer->size - effectiveNewSize;
producer->data = producer->data + remaining;
- producer->size = newSize;
+ producer->size = effectiveNewSize;
return remaining;
}
diff --git a/tests/fuzz/regression_driver.c b/tests/fuzz/regression_driver.c
index 550c65d8..26e2b6af 100644
--- a/tests/fuzz/regression_driver.c
+++ b/tests/fuzz/regression_driver.c
@@ -44,11 +44,12 @@ int main(int argc, char const **argv) {
fprintf(stderr, "WARNING: No files passed to %s\n", argv[0]);
for (i = 0; i < files->tableSize; ++i) {
char const *fileName = files->fileNames[i];
- DEBUGLOG(3, "Running %s", fileName);
size_t const fileSize = UTIL_getFileSize(fileName);
size_t readSize;
FILE *file;
+ DEBUGLOG(3, "Running %s", fileName);
+
/* Check that it is a regular file, and that the fileSize is valid.
* If it is not a regular file, then it may have been deleted since we
* constructed the list, so just skip it, but return an error exit code.
diff --git a/tests/fuzz/simple_decompress.c b/tests/fuzz/simple_decompress.c
index ab4697ff..0dc9e5b7 100644
--- a/tests/fuzz/simple_decompress.c
+++ b/tests/fuzz/simple_decompress.c
@@ -37,17 +37,18 @@ int LLVMFuzzerTestOneInput(const uint8_t *src, size_t size)
FUZZ_ASSERT(dctx);
}
- size_t const bufSize = FUZZ_dataProducer_uint32Range(producer, 0, 10 * size);
- void *rBuf = FUZZ_malloc(bufSize);
-
- size_t const dSize = ZSTD_decompressDCtx(dctx, rBuf, bufSize, src, size);
- if (!ZSTD_isError(dSize)) {
- /* If decompression was successful, the content size from the frame header(s) should be valid. */
- unsigned long long const expectedSize = ZSTD_findDecompressedSize(src, size);
- FUZZ_ASSERT(expectedSize != ZSTD_CONTENTSIZE_ERROR);
- FUZZ_ASSERT(expectedSize == ZSTD_CONTENTSIZE_UNKNOWN || expectedSize == dSize);
+ {
+ size_t const bufSize = FUZZ_dataProducer_uint32Range(producer, 0, 10 * size);
+ void *rBuf = FUZZ_malloc(bufSize);
+ size_t const dSize = ZSTD_decompressDCtx(dctx, rBuf, bufSize, src, size);
+ if (!ZSTD_isError(dSize)) {
+ /* If decompression was successful, the content size from the frame header(s) should be valid. */
+ unsigned long long const expectedSize = ZSTD_findDecompressedSize(src, size);
+ FUZZ_ASSERT(expectedSize != ZSTD_CONTENTSIZE_ERROR);
+ FUZZ_ASSERT(expectedSize == ZSTD_CONTENTSIZE_UNKNOWN || expectedSize == dSize);
+ }
+ free(rBuf);
}
- free(rBuf);
FUZZ_dataProducer_free(producer);
diff --git a/tests/fuzz/stream_round_trip.c b/tests/fuzz/stream_round_trip.c
index c2d6707a..6e340c81 100644
--- a/tests/fuzz/stream_round_trip.c
+++ b/tests/fuzz/stream_round_trip.c
@@ -136,7 +136,7 @@ static size_t compress(uint8_t *dst, size_t capacity,
return dstSize;
}
-size_t decompress(void* dst, size_t dstCapacity, void const* src, size_t srcSize, FUZZ_dataProducer_t* producer)
+static size_t decompress(void* dst, size_t dstCapacity, void const* src, size_t srcSize, FUZZ_dataProducer_t* producer)
{
ZSTD_inBuffer in = {src, srcSize, 0};
ZSTD_outBuffer out = {dst, dstCapacity, 0};