diff options
Diffstat (limited to 'fuzzer/dng_parser_fuzzer.cpp')
-rw-r--r-- | fuzzer/dng_parser_fuzzer.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/fuzzer/dng_parser_fuzzer.cpp b/fuzzer/dng_parser_fuzzer.cpp new file mode 100644 index 0000000..84db0f3 --- /dev/null +++ b/fuzzer/dng_parser_fuzzer.cpp @@ -0,0 +1,36 @@ +#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; +} |