| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include "dng_exceptions.h" |
| #include "dng_host.h" |
| #include "dng_info.h" |
| #include "dng_memory_stream.h" |
| #include "dng_negative.h" |
| |
| |
| extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
| dng_host host; |
| dng_memory_stream stream(host.Allocator()); |
| |
| stream.Put(data, size); |
| stream.SetReadPosition(0); |
| |
| std::unique_ptr<dng_negative> negative(host.Make_dng_negative()); |
| |
| try { |
| dng_info info; |
| info.Parse(host, stream); |
| info.PostParse(host); |
| |
| if (info.IsValidDNG()) { |
| negative->Parse(host, stream, info); |
| negative->PostParse(host, stream, info); |
| negative->ReadStage1Image(host, stream, info); |
| } |
| } catch (dng_exception &e) { |
| // dng_sdk throws C++ exceptions on errors |
| // catch them here to prevent libFuzzer from crashing. |
| } |
| |
| return 0; |
| } |