xref: /aosp_15_r20/external/dng_sdk/fuzzer/dng_parser_fuzzer.cpp (revision fd1fabb72dbdf09ea7034f531e6f8e9f57334c8d)
1*fd1fabb7SAndroid Build Coastguard Worker #include <stddef.h>
2*fd1fabb7SAndroid Build Coastguard Worker #include <stdint.h>
3*fd1fabb7SAndroid Build Coastguard Worker 
4*fd1fabb7SAndroid Build Coastguard Worker #include "dng_exceptions.h"
5*fd1fabb7SAndroid Build Coastguard Worker #include "dng_host.h"
6*fd1fabb7SAndroid Build Coastguard Worker #include "dng_info.h"
7*fd1fabb7SAndroid Build Coastguard Worker #include "dng_memory_stream.h"
8*fd1fabb7SAndroid Build Coastguard Worker #include "dng_negative.h"
9*fd1fabb7SAndroid Build Coastguard Worker 
10*fd1fabb7SAndroid Build Coastguard Worker 
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)11*fd1fabb7SAndroid Build Coastguard Worker extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
12*fd1fabb7SAndroid Build Coastguard Worker   dng_host host;
13*fd1fabb7SAndroid Build Coastguard Worker   dng_memory_stream stream(host.Allocator());
14*fd1fabb7SAndroid Build Coastguard Worker 
15*fd1fabb7SAndroid Build Coastguard Worker   stream.Put(data, size);
16*fd1fabb7SAndroid Build Coastguard Worker   stream.SetReadPosition(0);
17*fd1fabb7SAndroid Build Coastguard Worker 
18*fd1fabb7SAndroid Build Coastguard Worker   std::unique_ptr<dng_negative> negative(host.Make_dng_negative());
19*fd1fabb7SAndroid Build Coastguard Worker 
20*fd1fabb7SAndroid Build Coastguard Worker   try {
21*fd1fabb7SAndroid Build Coastguard Worker     dng_info info;
22*fd1fabb7SAndroid Build Coastguard Worker     info.Parse(host, stream);
23*fd1fabb7SAndroid Build Coastguard Worker     info.PostParse(host);
24*fd1fabb7SAndroid Build Coastguard Worker 
25*fd1fabb7SAndroid Build Coastguard Worker     if (info.IsValidDNG()) {
26*fd1fabb7SAndroid Build Coastguard Worker       negative->Parse(host, stream, info);
27*fd1fabb7SAndroid Build Coastguard Worker       negative->PostParse(host, stream, info);
28*fd1fabb7SAndroid Build Coastguard Worker       negative->ReadStage1Image(host, stream, info);
29*fd1fabb7SAndroid Build Coastguard Worker     }
30*fd1fabb7SAndroid Build Coastguard Worker   } catch (dng_exception &e) {
31*fd1fabb7SAndroid Build Coastguard Worker     // dng_sdk throws C++ exceptions on errors
32*fd1fabb7SAndroid Build Coastguard Worker     // catch them here to prevent libFuzzer from crashing.
33*fd1fabb7SAndroid Build Coastguard Worker   }
34*fd1fabb7SAndroid Build Coastguard Worker 
35*fd1fabb7SAndroid Build Coastguard Worker   return 0;
36*fd1fabb7SAndroid Build Coastguard Worker }
37