From fc944e1a4e5cb9f5fd5529f271ca616e9d193a96 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Wed, 10 Jan 2018 08:29:24 -0500 Subject: [PATCH] [fuzz] Use a static initializer to set the memory limit so it only happens once per process (#936) * Use a static initializer to set the memory limit so it only happens once per process * oops --- Magick++/fuzz/crop_fuzzer.cc | 4 ++++ Magick++/fuzz/encoder_fuzzer.cc | 5 ++++- Magick++/fuzz/enhance_fuzzer.cc | 5 ++++- Magick++/fuzz/huffman_decode_fuzzer.cc | 5 ++++- Magick++/fuzz/rotate_fuzzer.cc | 5 ++++- Magick++/fuzz/utils.cc | 8 ++++++++ 6 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 Magick++/fuzz/utils.cc diff --git a/Magick++/fuzz/crop_fuzzer.cc b/Magick++/fuzz/crop_fuzzer.cc index afcebba11..011c12d07 100644 --- a/Magick++/fuzz/crop_fuzzer.cc +++ b/Magick++/fuzz/crop_fuzzer.cc @@ -3,6 +3,10 @@ #include #include +#include "utils.cc" + +static FuzzingResourceLimits kFuzzLimits; + extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { uint16_t Width; uint16_t Height; diff --git a/Magick++/fuzz/encoder_fuzzer.cc b/Magick++/fuzz/encoder_fuzzer.cc index e575a6f1f..405986fff 100644 --- a/Magick++/fuzz/encoder_fuzzer.cc +++ b/Magick++/fuzz/encoder_fuzzer.cc @@ -3,11 +3,14 @@ #include #include +#include "utils.cc" + +static FuzzingResourceLimits kFuzzLimits; + #define FUZZ_ENCODER_STRING_LITERAL(name) #name #define FUZZ_ENCODER FUZZ_ENCODER_STRING_LITERAL(FUZZ_IMAGEMAGICK_ENCODER) extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - Magick::ResourceLimits::memory(1500000000); const Magick::Blob blob(Data, Size); Magick::Image image; try { diff --git a/Magick++/fuzz/enhance_fuzzer.cc b/Magick++/fuzz/enhance_fuzzer.cc index 8be37abf4..ac2ddd3fb 100644 --- a/Magick++/fuzz/enhance_fuzzer.cc +++ b/Magick++/fuzz/enhance_fuzzer.cc @@ -3,8 +3,11 @@ #include #include +#include "utils.cc" + +static FuzzingResourceLimits kFuzzLimits; + extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - Magick::ResourceLimits::memory(1500000000); const Magick::Blob blob(Data, Size); Magick::Image image; try { diff --git a/Magick++/fuzz/huffman_decode_fuzzer.cc b/Magick++/fuzz/huffman_decode_fuzzer.cc index b2c2c4c31..e10bb3e5e 100644 --- a/Magick++/fuzz/huffman_decode_fuzzer.cc +++ b/Magick++/fuzz/huffman_decode_fuzzer.cc @@ -3,8 +3,11 @@ #include #include +#include "utils.cc" + +static FuzzingResourceLimits kFuzzLimits; + extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { - Magick::ResourceLimits::memory(1500000000); const Magick::Blob blob(Data, Size); Magick::Image image; try { diff --git a/Magick++/fuzz/rotate_fuzzer.cc b/Magick++/fuzz/rotate_fuzzer.cc index b371629f6..6db922bb6 100644 --- a/Magick++/fuzz/rotate_fuzzer.cc +++ b/Magick++/fuzz/rotate_fuzzer.cc @@ -3,6 +3,10 @@ #include #include +#include "utils.cc" + +static FuzzingResourceLimits kFuzzLimits; + extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { if (Size < sizeof(double)) { return 0; @@ -11,7 +15,6 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { if (!isfinite(Degrees)) { return 0; } - Magick::ResourceLimits::memory(1500000000); const Magick::Blob blob(Data + sizeof(Degrees), Size - sizeof(Degrees)); Magick::Image image; try { diff --git a/Magick++/fuzz/utils.cc b/Magick++/fuzz/utils.cc new file mode 100644 index 000000000..6af9fedce --- /dev/null +++ b/Magick++/fuzz/utils.cc @@ -0,0 +1,8 @@ +#include + + +class FuzzingResourceLimits { + FuzzingResourceLimits() { + Magick::ResourceLimits::memory(1500000000); + } +}; -- 2.40.0