/src/guetzli/fuzz_target.cc
Line | Count | Source |
1 | | #include <stdint.h> |
2 | | #include "guetzli/jpeg_data.h" |
3 | | #include "guetzli/jpeg_data_reader.h" |
4 | | #include "guetzli/processor.h" |
5 | | |
6 | 5.44k | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
7 | 5.44k | std::string jpeg_data(reinterpret_cast<const char*>(data), size); |
8 | | |
9 | | // Ignore large images, to prevent timeouts. |
10 | 5.44k | guetzli::JPEGData jpg_header; |
11 | 5.44k | if (!guetzli::ReadJpeg(data, size, guetzli::JPEG_READ_HEADER, &jpg_header)) { |
12 | 803 | return 0; |
13 | 803 | } |
14 | 4.63k | static constexpr int kMaxPixels = 10000; |
15 | 4.63k | if (static_cast<int64_t>(jpg_header.width) * jpg_header.height > kMaxPixels) { |
16 | 21 | return 0; |
17 | 21 | } |
18 | | |
19 | | // TODO(robryk): Use nondefault parameters. |
20 | 4.61k | guetzli::Params params; |
21 | 4.61k | std::string jpeg_out; |
22 | 4.61k | (void)guetzli::Process(params, nullptr, jpeg_data, &jpeg_out); |
23 | | // TODO(robryk): Verify output distance if Process() succeeded. |
24 | 4.61k | return 0; |
25 | 4.63k | } |
26 | | |
27 | | |
28 | | |
29 | | |