summaryrefslogtreecommitdiff
path: root/fuzzer/dng_parser_fuzzer.cpp
diff options
context:
space:
mode:
authorEugene Rodionov <rodionov@google.com>2020-11-10 22:41:16 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-11-10 22:41:16 +0000
commit0033cfbf92f4dae9c8d2571133f6b81bf73442b6 (patch)
tree5e68befd6294de3b6d19fc35d396b551ea39b29a /fuzzer/dng_parser_fuzzer.cpp
parentb7a5507956330ebfa41b76e54aed68a7f4a31295 (diff)
parenta139e98c85270d811104aa3659f4ce0a6c395f54 (diff)
downloaddng_sdk-0033cfbf92f4dae9c8d2571133f6b81bf73442b6.tar.gz
Add a fuzz target to test DNG image parsing in dng_sdk. am: 0c2c0ca07a am: 49be9325f2 am: f4e068b00e am: a139e98c85
Original change: https://android-review.googlesource.com/c/platform/external/dng_sdk/+/1487679 Change-Id: I46c50dbe7f3126cc5c524b65bfd30689bc1c8e1f
Diffstat (limited to 'fuzzer/dng_parser_fuzzer.cpp')
-rw-r--r--fuzzer/dng_parser_fuzzer.cpp36
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;
+}