Merge "cameraservice: handle invalid native_handle from vndk impl" into main
diff --git a/services/camera/libcameraservice/aidl/AidlUtils.cpp b/services/camera/libcameraservice/aidl/AidlUtils.cpp
index 7291c5f..2225cfe 100644
--- a/services/camera/libcameraservice/aidl/AidlUtils.cpp
+++ b/services/camera/libcameraservice/aidl/AidlUtils.cpp
@@ -78,7 +78,13 @@
for (auto &handle : windowHandles) {
native_handle_t* nh = makeFromAidl(handle);
- iGBPs.push_back(new H2BGraphicBufferProducer(AImageReader_getHGBPFromHandle(nh)));
+ auto igbp = AImageReader_getHGBPFromHandle(nh);
+ if (igbp == nullptr) {
+ ALOGE("%s: Could not get HGBP from NativeHandle: %s. Skipping.",
+ __FUNCTION__, handle.toString().c_str());
+ continue;
+ }
+ iGBPs.push_back(new H2BGraphicBufferProducer(igbp));
native_handle_delete(nh);
}
UOutputConfiguration outputConfiguration(
diff --git a/services/camera/libcameraservice/hidl/Utils.cpp b/services/camera/libcameraservice/hidl/Utils.cpp
index b5dddf7..d0302d0 100644
--- a/services/camera/libcameraservice/hidl/Utils.cpp
+++ b/services/camera/libcameraservice/hidl/Utils.cpp
@@ -88,7 +88,13 @@
auto &windowHandles = hOutputConfiguration.windowHandles;
iGBPs.reserve(windowHandles.size());
for (auto &handle : windowHandles) {
- iGBPs.push_back(new H2BGraphicBufferProducer(AImageReader_getHGBPFromHandle(handle)));
+ auto igbp = AImageReader_getHGBPFromHandle(handle);
+ if (igbp == nullptr) {
+ ALOGE("%s: Could not get HGBP from native_handle: %p. Skipping.",
+ __FUNCTION__, handle.getNativeHandle());
+ continue;
+ }
+ iGBPs.push_back(new H2BGraphicBufferProducer(igbp));
}
hardware::camera2::params::OutputConfiguration outputConfiguration(
iGBPs, convertFromHidl(hOutputConfiguration.rotation),