diff options
| author | 2022-11-17 01:39:09 +0000 | |
|---|---|---|
| committer | 2022-11-17 01:39:09 +0000 | |
| commit | cf5c3ee2c8dbd82acce96cafe73eca32bd7117d1 (patch) | |
| tree | 924dfdb4304fa86146504d52801c5cade54e0341 | |
| parent | d1c4b8abbb79bc98e506618c504bb3dac3355470 (diff) | |
| parent | 41df6d220179b23365738b4648d40f78a61d71e4 (diff) | |
Merge "libbinder_ndk: more accurate error for array allocator failure" am: b1fd297a2a am: 901b2e1a3a am: 41df6d2201
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2304973
Change-Id: I2b1117deab522ccd8ee3d3a21288ea467b9d452d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | libs/binder/ndk/parcel.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/libs/binder/ndk/parcel.cpp b/libs/binder/ndk/parcel.cpp index c320e8d6df..86930229ce 100644 --- a/libs/binder/ndk/parcel.cpp +++ b/libs/binder/ndk/parcel.cpp @@ -129,7 +129,13 @@ binder_status_t ReadArray(const AParcel* parcel, void* arrayData, } T* array; - if (!allocator(arrayData, length, &array)) return STATUS_NO_MEMORY; + if (!allocator(arrayData, length, &array)) { + if (length < 0) { + return STATUS_UNEXPECTED_NULL; + } else { + return STATUS_NO_MEMORY; + } + } if (length <= 0) return STATUS_OK; if (array == nullptr) return STATUS_NO_MEMORY; @@ -157,7 +163,13 @@ binder_status_t ReadArray<char16_t>(const AParcel* parcel, void* arrayData, } char16_t* array; - if (!allocator(arrayData, length, &array)) return STATUS_NO_MEMORY; + if (!allocator(arrayData, length, &array)) { + if (length < 0) { + return STATUS_UNEXPECTED_NULL; + } else { + return STATUS_NO_MEMORY; + } + } if (length <= 0) return STATUS_OK; if (array == nullptr) return STATUS_NO_MEMORY; @@ -204,7 +216,13 @@ binder_status_t ReadArray(const AParcel* parcel, void* arrayData, ArrayAllocator return status; } - if (!allocator(arrayData, length)) return STATUS_NO_MEMORY; + if (!allocator(arrayData, length)) { + if (length < 0) { + return STATUS_UNEXPECTED_NULL; + } else { + return STATUS_NO_MEMORY; + } + } if (length <= 0) return STATUS_OK; |