Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a450244 authored by Devin Moore's avatar Devin Moore
Browse files

libbinder_ndk: more accurate error for array allocator failure

The allocator can fail due to no memory.
In the non-nullable case, it can also fail if the array is null. So we
return STATUS_UNEXPECTED_NULL in those cases.

Test: run the following with local changes to remove the oemlock HIDL
service and applying patchset 2 of ag/20460045
Test: atest GtsOemLockServiceTestCases
Bug: na

Change-Id: I385780cd407e2d0b5707032ff39ae20c937eea66
parent 6df92f08
Loading
Loading
Loading
Loading
+21 −3
Original line number Original line Diff line number Diff line
@@ -129,7 +129,13 @@ binder_status_t ReadArray(const AParcel* parcel, void* arrayData,
    }
    }


    T* array;
    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 (length <= 0) return STATUS_OK;
    if (array == nullptr) return STATUS_NO_MEMORY;
    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;
    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 (length <= 0) return STATUS_OK;
    if (array == nullptr) return STATUS_NO_MEMORY;
    if (array == nullptr) return STATUS_NO_MEMORY;
@@ -204,7 +216,13 @@ binder_status_t ReadArray(const AParcel* parcel, void* arrayData, ArrayAllocator
        return status;
        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;
    if (length <= 0) return STATUS_OK;