From 0ce723fc8bf6095074562a871b9215d6dea28ab5 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Fri, 1 Oct 2021 23:15:25 +0200 Subject: android: Check if Stream configurations were generated correctly The libcamera Android Camera HAL generates camera configurations for the StillCapture, Raw and ViewFinder stream roles. But there is only a check if the configuration generation failed, for the StillCapture stream role. This could lead to a NULL pointer dereference if a pipeline handler fails to generate a default configuration for one of the other two stream roles. Signed-off-by: Javier Martinez Canillas Reviewed-by: Jacopo Mondi Reviewed-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- src/android/camera_capabilities.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/android') diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 87a6e1c6..baeedc11 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -408,6 +408,11 @@ CameraCapabilities::initializeYUVResolutions(const PixelFormat &pixelFormat, std::vector supportedResolutions; std::unique_ptr cameraConfig = camera_->generateConfiguration({ StreamRole::Viewfinder }); + if (!cameraConfig) { + LOG(HAL, Error) << "Failed to get supported YUV resolutions"; + return supportedResolutions; + } + StreamConfiguration &cfg = cameraConfig->at(0); for (const Size &res : resolutions) { @@ -431,11 +436,17 @@ CameraCapabilities::initializeYUVResolutions(const PixelFormat &pixelFormat, std::vector CameraCapabilities::initializeRawResolutions(const PixelFormat &pixelFormat) { + std::vector supportedResolutions; std::unique_ptr cameraConfig = camera_->generateConfiguration({ StreamRole::Raw }); + if (!cameraConfig) { + LOG(HAL, Error) << "Failed to get supported Raw resolutions"; + return supportedResolutions; + } + StreamConfiguration &cfg = cameraConfig->at(0); const StreamFormats &formats = cfg.formats(); - std::vector supportedResolutions = formats.sizes(pixelFormat); + supportedResolutions = formats.sizes(pixelFormat); return supportedResolutions; } -- cgit v1.2.1