libavb_aftl: enable fuzzer for parser

Define a fuzzer for the parse_aftl_image function. It covers the
subfunctions parse_icp_entry, parse_trillian_log_root_descriptor,
parse_signature, parse_annotation and parse_annotation_leaf. Include an
inclusion proof as base corpus, manually extracted from
test/data/aftl_output_vbmeta_with_1_icp.img.

Test: SANITIZE_HOST=address m libavb_aftl_fuzzer
Change-Id: Ia65c053f729773b6c231372311cc9768a9cf0f9c
diff --git a/Android.bp b/Android.bp
index 6a80a62..5e99b47 100644
--- a/Android.bp
+++ b/Android.bp
@@ -258,6 +258,26 @@
     ],
 }
 
+cc_fuzz {
+    name: "libavb_aftl_fuzzer",
+    defaults: ["avb_defaults"],
+    // The fuzzing entry point is declared and defined in the same file.
+    // Overwrite the behaviour introduced by avb_defaults.
+    cflags: [
+        "-Wno-missing-prototypes",
+    ],
+    srcs: [
+        "test/avb_aftl_fuzz.cc",
+    ],
+    static_libs: ["libavb", "libavb_aftl"],
+    host_supported: true,
+    corpus: ["test/corpus/*"],
+    fuzz_config: {
+        cc: ["tweek@google.com", "jpm@google.com"],
+        componentid: 685985,
+    }
+}
+
 cc_library_host_static {
     name: "libavb_atx_host",
     defaults: ["avb_defaults"],
diff --git a/test/avb_aftl_fuzz.cc b/test/avb_aftl_fuzz.cc
new file mode 100644
index 0000000..89b59d8
--- /dev/null
+++ b/test/avb_aftl_fuzz.cc
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "libavb_aftl/avb_aftl_types.h"
+#include "libavb_aftl/avb_aftl_util.h"
+
+extern "C" int LLVMFuzzerTestOneInput(const char* data, size_t size) {
+  AftlImage* image = parse_aftl_image((uint8_t*)data, size);
+  free_aftl_image(image);
+  return 0;
+}
diff --git a/test/corpus/icp.bin b/test/corpus/icp.bin
new file mode 100644
index 0000000..19125fe
--- /dev/null
+++ b/test/corpus/icp.bin
Binary files differ