/src/graphicsmagick/fuzzing/coder_fuzzer.cc
Line | Count | Source |
1 | | #include <cstdint> |
2 | | |
3 | | #include <Magick++.h> |
4 | | |
5 | | #include "utils.cc" |
6 | | |
7 | 365k | #define FUZZ_CODER_STRING_LITERAL_X(name) FUZZ_CODER_STRING_LITERAL(name) |
8 | 365k | #define FUZZ_CODER_STRING_LITERAL(name) #name |
9 | | |
10 | 365k | #define FUZZ_CODER FUZZ_CODER_STRING_LITERAL_X(FUZZ_GRAPHICSMAGICK_CODER) |
11 | | |
12 | | |
13 | 365k | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
14 | 365k | Magick::Image image; |
15 | 365k | std::string coder = FUZZ_CODER; |
16 | 365k | #if !defined(FUZZ_GRAPHICSMAGICK_CODER_READANY) |
17 | 365k | image.magick(coder); |
18 | 365k | image.fileName(coder + ":"); |
19 | 365k | #endif |
20 | | // Add an arbitrary limit on JPEG scan lines |
21 | 365k | image.defineValue("JPEG", "max-scan-number", "50"); |
22 | 365k | const Magick::Blob blob(data, size); |
23 | 365k | try { |
24 | 365k | image.read(blob); |
25 | 365k | } catch (Magick::Exception &e) { |
26 | 283k | return 0; |
27 | 283k | } |
28 | | |
29 | 0 | #if FUZZ_GRAPHICSMAGICK_CODER_WRITE |
30 | 82.5k | Magick::Blob outBlob; |
31 | 82.5k | try { |
32 | 82.5k | image.magick(coder); |
33 | 82.5k | image.write(&outBlob, coder); |
34 | 82.5k | } catch (Magick::Exception &e) {} |
35 | 82.5k | #endif |
36 | | |
37 | 82.5k | return 0; |
38 | 82.5k | } |