1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #pragma once 17 18 #include <android/binder_auto_utils.h> 19 #include <vector> 20 21 #include <android/binder_libbinder.h> 22 #include <android/binder_parcel.h> 23 #include "parcel_fuzzer.h" 24 25 class NdkParcelAdapter { 26 public: NdkParcelAdapter()27 NdkParcelAdapter() : mParcel(AParcel_create()) {} 28 aParcel()29 const AParcel* aParcel() const { return mParcel.get(); } aParcel()30 AParcel* aParcel() { return mParcel.get(); } 31 parcel()32 const android::Parcel* parcel() const { return AParcel_viewPlatformParcel(aParcel()); } parcel()33 android::Parcel* parcel() { return AParcel_viewPlatformParcel(aParcel()); } 34 data()35 const uint8_t* data() const { return parcel()->data(); } dataSize()36 size_t dataSize() const { return parcel()->dataSize(); } dataAvail()37 size_t dataAvail() const { return parcel()->dataAvail(); } dataPosition()38 size_t dataPosition() const { return parcel()->dataPosition(); } dataCapacity()39 size_t dataCapacity() const { return parcel()->dataCapacity(); } setData(const uint8_t * buffer,size_t len)40 android::status_t setData(const uint8_t* buffer, size_t len) { 41 return parcel()->setData(buffer, len); 42 } 43 appendFrom(const NdkParcelAdapter * parcel,int32_t start,int32_t len)44 android::status_t appendFrom(const NdkParcelAdapter* parcel, int32_t start, int32_t len) { 45 return AParcel_appendFrom(parcel->aParcel(), aParcel(), start, len); 46 } 47 48 private: 49 ndk::ScopedAParcel mParcel; 50 }; 51 52 extern std::vector<ParcelRead<NdkParcelAdapter>> BINDER_NDK_PARCEL_READ_FUNCTIONS; 53