Added libHidlBase_parcel_fuzzer

Test: ./libHidlBase_parcel_fuzzer
exec/s: 1000
Bug: 193202093

Change-Id: I2e77ccc12afaaa76c45580676a6e916ea9924ebf
diff --git a/fuzzer/libHidlBase_fuzzer_helper.h b/fuzzer/libHidlBase_fuzzer_helper.h
new file mode 100644
index 0000000..53726dc
--- /dev/null
+++ b/fuzzer/libHidlBase_fuzzer_helper.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef _LIBHIDLBASE_FUZZER_HELPER_H
+#define _LIBHIDLBASE_FUZZER_HELPER_H
+
+#include <fuzzer/FuzzedDataProvider.h>
+#include <hidl/HidlBinderSupport.h>
+
+using namespace android;
+using namespace hardware;
+using namespace details;
+
+constexpr uint32_t kMaxBytes = 256;
+constexpr uint32_t kMin = 0;
+
+hidl_string createHidlString(FuzzedDataProvider& fdp) {
+    auto invokeHidlString = fdp.PickValueInArray<const std::function<hidl_string()>>({
+            [&]() { return hidl_string(fdp.ConsumeRandomLengthString(kMaxBytes)); },
+            [&]() { return hidl_string((fdp.ConsumeRandomLengthString(kMaxBytes)).c_str()); },
+            [&]() {
+                std::string testString = fdp.ConsumeRandomLengthString(kMaxBytes);
+                return hidl_string(testString.c_str(),
+                                   fdp.ConsumeIntegralInRange<uint32_t>(kMin, testString.length()));
+            },
+            [&]() { return fdp.ConsumeRandomLengthString(kMaxBytes); },
+    });
+    return invokeHidlString();
+}
+
+hidl_memory createHidlMemory(FuzzedDataProvider& fdp) {
+    if (fdp.ConsumeBool()) {
+        return hidl_memory();
+    }
+    return hidl_memory(createHidlString(fdp), hidl_handle(),
+                       fdp.ConsumeIntegral<uint64_t>() /* size */);
+}
+
+Status createStatus(FuzzedDataProvider& fdp) {
+    auto invokeStatus = fdp.PickValueInArray<const std::function<Status()>>({
+            [&]() { return Status::fromExceptionCode(fdp.ConsumeIntegral<uint32_t>()); },
+            [&]() {
+                return Status::fromExceptionCode(
+                        fdp.ConsumeIntegral<uint32_t>(),
+                        (fdp.ConsumeRandomLengthString(kMaxBytes)).c_str());
+            },
+            [&]() { return Status::fromStatusT(fdp.ConsumeIntegral<uint32_t>()); },
+            [&]() { return Status(); },
+    });
+    return invokeStatus();
+}
+
+#endif  // _LIBHIDLBASE_FUZZER_HELPER_H