Loading include/input/Input.h +9 −0 Original line number Diff line number Diff line Loading @@ -996,6 +996,15 @@ protected: std::vector<PointerProperties> mPointerProperties; std::vector<nsecs_t> mSampleEventTimes; std::vector<PointerCoords> mSamplePointerCoords; private: /** * Create a human-readable string representation of the event's data for debugging purposes. * * Unlike operator<<, this method does not assume that the event data is valid or consistent, or * call any accessor methods that might themselves call safeDump in the case of invalid data. */ std::string safeDump() const; }; std::ostream& operator<<(std::ostream& out, const MotionEvent& event); Loading libs/binder/ndk/binder_rpc.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -107,16 +107,20 @@ ABinderRpc_AccessorProvider* ABinderRpc_registerAccessorProvider( ABinderRpc_AccessorProvider_getAccessorCallback provider, const char* const* const instances, size_t numInstances, void* data, ABinderRpc_AccessorProviderUserData_deleteCallback onDelete) { if (provider == nullptr) { ALOGE("Null provider passed to ABinderRpc_registerAccessorProvider"); return nullptr; } if (data && onDelete == nullptr) { ALOGE("If a non-null data ptr is passed to ABinderRpc_registerAccessorProvider, then a " "ABinderRpc_AccessorProviderUserData_deleteCallback must also be passed to delete " "the data object once the ABinderRpc_AccessorProvider is removed."); return nullptr; } // call the onDelete when the last reference of this goes away (when the // last reference to the generate std::function goes away). std::shared_ptr<OnDeleteProviderHolder> onDeleteHolder = std::make_shared<OnDeleteProviderHolder>(data, onDelete); if (provider == nullptr) { ALOGE("Null provider passed to ABinderRpc_registerAccessorProvider"); return nullptr; } if (numInstances == 0 || instances == nullptr) { ALOGE("No instances passed to ABinderRpc_registerAccessorProvider. numInstances: %zu", numInstances); Loading @@ -126,10 +130,6 @@ ABinderRpc_AccessorProvider* ABinderRpc_registerAccessorProvider( for (size_t i = 0; i < numInstances; i++) { instanceStrings.emplace(instances[i]); } // call the onDelete when the last reference of this goes away (when the // last reference to the generate std::function goes away). std::shared_ptr<OnDeleteProviderHolder> onDeleteHolder = std::make_shared<OnDeleteProviderHolder>(data, onDelete); android::RpcAccessorProvider generate = [provider, onDeleteHolder](const String16& name) -> sp<IBinder> { ABinderRpc_Accessor* accessor = provider(String8(name).c_str(), onDeleteHolder->mData); Loading libs/binder/ndk/include_platform/android/binder_rpc.h +2 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,8 @@ typedef void (*ABinderRpc_AccessorProviderUserData_deleteCallback)(void* _Nullab * registered. In the error case of duplicate instances, if data was * provided with a ABinderRpc_AccessorProviderUserData_deleteCallback, * the callback will be called to delete the data. * If nullptr is returned, ABinderRpc_AccessorProviderUserData_deleteCallback * will be called on data immediately. * Otherwise returns a pointer to the ABinderRpc_AccessorProvider that * can be used to remove with ABinderRpc_unregisterAccessorProvider. */ Loading libs/binder/tests/binderRpcTest.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -1400,6 +1400,26 @@ TEST_F(BinderARpcNdk, ARpcProviderNewDelete) { EXPECT_TRUE(isDeleted); } TEST_F(BinderARpcNdk, ARpcProviderDeleteOnError) { bool isDeleted = false; AccessorProviderData* data = new AccessorProviderData{{}, 0, &isDeleted}; ABinderRpc_AccessorProvider* provider = ABinderRpc_registerAccessorProvider(getAccessor, kARpcSupportedServices, 0, data, accessorProviderDataOnDelete); ASSERT_EQ(provider, nullptr); EXPECT_TRUE(isDeleted); } TEST_F(BinderARpcNdk, ARpcProvideOnErrorNoDeleteCbNoCrash) { ABinderRpc_AccessorProvider* provider = ABinderRpc_registerAccessorProvider(getAccessor, kARpcSupportedServices, 0, nullptr, nullptr); ASSERT_EQ(provider, nullptr); } TEST_F(BinderARpcNdk, ARpcProviderDuplicateInstance) { const char* instance = "some.instance.name.IFoo/default"; const uint32_t numInstances = 2; Loading libs/binder/tests/parcel_fuzzer/test_fuzzer/Android.bp +5 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,11 @@ sh_test_host { darwin: { enabled: false, }, host: { data_libs: [ "libc++", ], }, }, test_suites: ["general-tests"], } Loading
include/input/Input.h +9 −0 Original line number Diff line number Diff line Loading @@ -996,6 +996,15 @@ protected: std::vector<PointerProperties> mPointerProperties; std::vector<nsecs_t> mSampleEventTimes; std::vector<PointerCoords> mSamplePointerCoords; private: /** * Create a human-readable string representation of the event's data for debugging purposes. * * Unlike operator<<, this method does not assume that the event data is valid or consistent, or * call any accessor methods that might themselves call safeDump in the case of invalid data. */ std::string safeDump() const; }; std::ostream& operator<<(std::ostream& out, const MotionEvent& event); Loading
libs/binder/ndk/binder_rpc.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -107,16 +107,20 @@ ABinderRpc_AccessorProvider* ABinderRpc_registerAccessorProvider( ABinderRpc_AccessorProvider_getAccessorCallback provider, const char* const* const instances, size_t numInstances, void* data, ABinderRpc_AccessorProviderUserData_deleteCallback onDelete) { if (provider == nullptr) { ALOGE("Null provider passed to ABinderRpc_registerAccessorProvider"); return nullptr; } if (data && onDelete == nullptr) { ALOGE("If a non-null data ptr is passed to ABinderRpc_registerAccessorProvider, then a " "ABinderRpc_AccessorProviderUserData_deleteCallback must also be passed to delete " "the data object once the ABinderRpc_AccessorProvider is removed."); return nullptr; } // call the onDelete when the last reference of this goes away (when the // last reference to the generate std::function goes away). std::shared_ptr<OnDeleteProviderHolder> onDeleteHolder = std::make_shared<OnDeleteProviderHolder>(data, onDelete); if (provider == nullptr) { ALOGE("Null provider passed to ABinderRpc_registerAccessorProvider"); return nullptr; } if (numInstances == 0 || instances == nullptr) { ALOGE("No instances passed to ABinderRpc_registerAccessorProvider. numInstances: %zu", numInstances); Loading @@ -126,10 +130,6 @@ ABinderRpc_AccessorProvider* ABinderRpc_registerAccessorProvider( for (size_t i = 0; i < numInstances; i++) { instanceStrings.emplace(instances[i]); } // call the onDelete when the last reference of this goes away (when the // last reference to the generate std::function goes away). std::shared_ptr<OnDeleteProviderHolder> onDeleteHolder = std::make_shared<OnDeleteProviderHolder>(data, onDelete); android::RpcAccessorProvider generate = [provider, onDeleteHolder](const String16& name) -> sp<IBinder> { ABinderRpc_Accessor* accessor = provider(String8(name).c_str(), onDeleteHolder->mData); Loading
libs/binder/ndk/include_platform/android/binder_rpc.h +2 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,8 @@ typedef void (*ABinderRpc_AccessorProviderUserData_deleteCallback)(void* _Nullab * registered. In the error case of duplicate instances, if data was * provided with a ABinderRpc_AccessorProviderUserData_deleteCallback, * the callback will be called to delete the data. * If nullptr is returned, ABinderRpc_AccessorProviderUserData_deleteCallback * will be called on data immediately. * Otherwise returns a pointer to the ABinderRpc_AccessorProvider that * can be used to remove with ABinderRpc_unregisterAccessorProvider. */ Loading
libs/binder/tests/binderRpcTest.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -1400,6 +1400,26 @@ TEST_F(BinderARpcNdk, ARpcProviderNewDelete) { EXPECT_TRUE(isDeleted); } TEST_F(BinderARpcNdk, ARpcProviderDeleteOnError) { bool isDeleted = false; AccessorProviderData* data = new AccessorProviderData{{}, 0, &isDeleted}; ABinderRpc_AccessorProvider* provider = ABinderRpc_registerAccessorProvider(getAccessor, kARpcSupportedServices, 0, data, accessorProviderDataOnDelete); ASSERT_EQ(provider, nullptr); EXPECT_TRUE(isDeleted); } TEST_F(BinderARpcNdk, ARpcProvideOnErrorNoDeleteCbNoCrash) { ABinderRpc_AccessorProvider* provider = ABinderRpc_registerAccessorProvider(getAccessor, kARpcSupportedServices, 0, nullptr, nullptr); ASSERT_EQ(provider, nullptr); } TEST_F(BinderARpcNdk, ARpcProviderDuplicateInstance) { const char* instance = "some.instance.name.IFoo/default"; const uint32_t numInstances = 2; Loading
libs/binder/tests/parcel_fuzzer/test_fuzzer/Android.bp +5 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,11 @@ sh_test_host { darwin: { enabled: false, }, host: { data_libs: [ "libc++", ], }, }, test_suites: ["general-tests"], }