[libcamera-devel] [PATCH] libcamera: pipeline: uvcvideo: Fix crash when default entity is not found

Paul Elder paul.elder at ideasonboard.com
Fri Jan 3 06:15:31 CET 2020


Hi Laurent,

Thank you for the patch.

On Thu, Jan 02, 2020 at 02:03:06AM +0200, Laurent Pinchart wrote:
> Commit e441f2c7f46d ("libcamera: pipeline: uvcvideo: Add controls
> support") broke handling of UVC devices without a default entity by
> turning the error check into an always false check. Fix it.
> 
> Fixes: e441f2c7f46d ("libcamera: pipeline: uvcvideo: Add controls support")
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  src/libcamera/pipeline/uvcvideo.cpp | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
> index 3043366bee38..8d7f7ea79410 100644
> --- a/src/libcamera/pipeline/uvcvideo.cpp
> +++ b/src/libcamera/pipeline/uvcvideo.cpp
> @@ -296,19 +296,19 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
>  	std::unique_ptr<UVCCameraData> data = utils::make_unique<UVCCameraData>(this);
>  
>  	/* Locate and initialise the camera data with the default video node. */
> -	for (MediaEntity *entity : media->entities()) {
> -		if (entity->flags() & MEDIA_ENT_FL_DEFAULT) {
> -			if (data->init(entity))
> -				return false;
> -			break;
> -		}
> -	}
> -
> -	if (!data) {
> +	const std::vector<MediaEntity *> &entities = media->entities();
> +	auto entity = std::find_if(entities.begin(), entities.end(),
> +				   [](MediaEntity *entity) {
> +					return entity->flags() & MEDIA_ENT_FL_DEFAULT;
> +				   });
> +	if (entity == entities.end()) {
>  		LOG(UVC, Error) << "Could not find a default video device";
>  		return false;
>  	}
>  
> +	if (data->init(*entity))
> +		return false;
> +
>  	/* Create and register the camera. */
>  	std::set<Stream *> streams{ &data->stream_ };
>  	std::shared_ptr<Camera> camera = Camera::create(this, media->model(), streams);

Looks good to me.

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>


More information about the libcamera-devel mailing list