From e6a88a8119d59cc703da8c1616172aefbef99379 Mon Sep 17 00:00:00 2001 From: Avichal Rakesh Date: Thu, 12 Oct 2023 12:46:39 -0700 Subject: [PATCH] ExternalCameraHAL: Check for empty native handle instead of null. AIDL cannot send nullptr when parceling NativeHandles. Instead, it sends an empty handle. Logic which previously relied on null checks should now rely on checking if the native_handle is empty or not. This CL updates ExternalCameraUtils to check for empty handles instead. Bug: 299170474 Test: CameraAidlTest#processCaptureRequestInvalidBuffer passes Change-Id: Id4ba928defaa061708a3c1cd68aa510b376f6cb3 --- camera/device/default/ExternalCameraUtils.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/camera/device/default/ExternalCameraUtils.cpp b/camera/device/default/ExternalCameraUtils.cpp index cfb95f2a4d..30c216f209 100644 --- a/camera/device/default/ExternalCameraUtils.cpp +++ b/camera/device/default/ExternalCameraUtils.cpp @@ -402,7 +402,10 @@ aidl::android::hardware::camera::common::Status importBufferImpl( buffer_handle_t buf, /*out*/ buffer_handle_t** outBufPtr) { using ::aidl::android::hardware::camera::common::Status; - if (buf == nullptr && bufId == BUFFER_ID_NO_BUFFER) { + // AIDL does not have null NativeHandles. It sends empty handles instead. + // We check for when the buf is empty instead of when buf is null. + bool isBufEmpty = buf == nullptr || (buf->numFds == 0 && buf->numInts == 0); + if (isBufEmpty && bufId == BUFFER_ID_NO_BUFFER) { ALOGE("%s: bufferId %" PRIu64 " has null buffer handle!", __FUNCTION__, bufId); return Status::ILLEGAL_ARGUMENT; } @@ -857,4 +860,4 @@ int AllocatedV4L2Frame::getData(uint8_t** outData, size_t* dataSize) { } // namespace device } // namespace camera } // namespace hardware -} // namespace android \ No newline at end of file +} // namespace android