From 3750600b4f3b85cf068c0a276a777806950a46a5 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Tue, 18 Feb 2020 10:57:44 +0900 Subject: binder_parcel_fuzzer: add read* for std::optional These methods were added because AIDL uses std::optional for nullable types for C++ backends. Bug: 142543448 Bug: 144773267 (std::optional for nullable) Test: run binder_parcel_fuzzer for a few minutes Change-Id: Iab70283382045771741b8370932c6265aa058ec9 Merged-In: Iab70283382045771741b8370932c6265aa058ec9 --- libs/binder/parcel_fuzzer/binder.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'libs') diff --git a/libs/binder/parcel_fuzzer/binder.cpp b/libs/binder/parcel_fuzzer/binder.cpp index c2d4a3f66a..e5c6333b79 100644 --- a/libs/binder/parcel_fuzzer/binder.cpp +++ b/libs/binder/parcel_fuzzer/binder.cpp @@ -137,6 +137,7 @@ std::vector> BINDER_PARCEL_READ_FUNCTIONS { PARCEL_READ_WITH_STATUS(std::string, readUtf8FromUtf16), PARCEL_READ_WITH_STATUS(std::unique_ptr, readUtf8FromUtf16), + PARCEL_READ_WITH_STATUS(std::optional, readUtf8FromUtf16), [] (const ::android::Parcel& p, uint8_t /*data*/) { FUZZ_LOG() << "about to read c-str"; const char* str = p.readCString(); @@ -145,6 +146,7 @@ std::vector> BINDER_PARCEL_READ_FUNCTIONS { PARCEL_READ_OPT_STATUS(android::String8, readString8), PARCEL_READ_OPT_STATUS(android::String16, readString16), PARCEL_READ_WITH_STATUS(std::unique_ptr, readString16), + PARCEL_READ_WITH_STATUS(std::optional, readString16), [] (const ::android::Parcel& p, uint8_t /*data*/) { FUZZ_LOG() << "about to readString16Inplace"; size_t outLen = 0; @@ -158,17 +160,22 @@ std::vector> BINDER_PARCEL_READ_FUNCTIONS { // TODO(b/131868573): can force read of arbitrarily sized vector // PARCEL_READ_WITH_STATUS(std::vector, readEnumVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readEnumVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readEnumVector), // PARCEL_READ_WITH_STATUS(std::vector, readEnumVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readEnumVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readEnumVector), // PARCEL_READ_WITH_STATUS(std::vector, readEnumVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readEnumVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readEnumVector), // only reading one parcelable type for now // TODO(b/131868573): can force read of arbitrarily sized vector // PARCEL_READ_WITH_STATUS(std::unique_ptr>>, readParcelableVector), + // PARCEL_READ_WITH_STATUS(std::optional>>, readParcelableVector), // PARCEL_READ_WITH_STATUS(std::vector, readParcelableVector), PARCEL_READ_WITH_STATUS(ExampleParcelable, readParcelable), PARCEL_READ_WITH_STATUS(std::unique_ptr, readParcelable), + PARCEL_READ_WITH_STATUS(std::optional, readParcelable), // only reading one binder type for now PARCEL_READ_WITH_STATUS(android::sp, readStrongBinder), @@ -176,30 +183,42 @@ std::vector> BINDER_PARCEL_READ_FUNCTIONS { // TODO(b/131868573): can force read of arbitrarily sized vector // PARCEL_READ_WITH_STATUS(::std::unique_ptr>>, readStrongBinderVector), + // PARCEL_READ_WITH_STATUS(::std::optional>>, readStrongBinderVector), // PARCEL_READ_WITH_STATUS(std::vector>, readStrongBinderVector), // TODO(b/131868573): can force read of arbitrarily sized vector // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readByteVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readByteVector), // PARCEL_READ_WITH_STATUS(std::vector, readByteVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readByteVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readByteVector), // PARCEL_READ_WITH_STATUS(std::vector, readByteVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readInt32Vector), + // PARCEL_READ_WITH_STATUS(std::optional>, readInt32Vector), // PARCEL_READ_WITH_STATUS(std::vector, readInt32Vector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readInt64Vector), + // PARCEL_READ_WITH_STATUS(std::optional>, readInt64Vector), // PARCEL_READ_WITH_STATUS(std::vector, readInt64Vector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readUint64Vector), + // PARCEL_READ_WITH_STATUS(std::optional>, readUint64Vector), // PARCEL_READ_WITH_STATUS(std::vector, readUint64Vector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readFloatVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readFloatVector), // PARCEL_READ_WITH_STATUS(std::vector, readFloatVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readDoubleVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readDoubleVector), // PARCEL_READ_WITH_STATUS(std::vector, readDoubleVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readBoolVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readBoolVector), // PARCEL_READ_WITH_STATUS(std::vector, readBoolVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readCharVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readCharVector), // PARCEL_READ_WITH_STATUS(std::vector, readCharVector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>>, readString16Vector), + // PARCEL_READ_WITH_STATUS(std::optional>>, readString16Vector), // PARCEL_READ_WITH_STATUS(std::vector, readString16Vector), // PARCEL_READ_WITH_STATUS(std::unique_ptr>>, readUtf8VectorFromUtf16Vector), + // PARCEL_READ_WITH_STATUS(std::optional>>, readUtf8VectorFromUtf16Vector), // PARCEL_READ_WITH_STATUS(std::vector, readUtf8VectorFromUtf16Vector), [] (const android::Parcel& p, uint8_t /*len*/) { @@ -236,6 +255,7 @@ std::vector> BINDER_PARCEL_READ_FUNCTIONS { // TODO(b/131868573): can force read of arbitrarily sized vector // PARCEL_READ_WITH_STATUS(std::unique_ptr>, readUniqueFileDescriptorVector), + // PARCEL_READ_WITH_STATUS(std::optional>, readUniqueFileDescriptorVector), // PARCEL_READ_WITH_STATUS(std::vector, readUniqueFileDescriptorVector), [] (const android::Parcel& p, uint8_t len) { -- cgit v1.2.3-59-g8ed1b