[libcamera-devel] [PATCH v2] gstreamer: Add error checking in gst_libcamera_src_task_enter()

Vedant Paranjape vedantparanjape160201 at gmail.com
Tue Jun 1 21:27:26 CEST 2021


Hey,
I think I messed up with the commit history in this patch, do you want me
to rebase the commit in v1 and v2 together and send a new patch ?

Regards,
*Vedant Paranjape*

On Wed, Jun 2, 2021 at 12:54 AM Vedant Paranjape <
vedantparanjape160201 at gmail.com> wrote:

> Error checking the output from generateConfiguration() was missing in
> the code. Only assert was added as a guard which checked if the size of
> generated camera config was equal to size of roles passed to it.
>
> If the roles argument has a invalid member, it will return a nullptr and
> then
> trying to access a member on a nullptr for size comparison will result in a
> segmentation fault. So, if the function returns a nullptr, it will simply
> put
> a error on GstBus and gracefully exit.
>
> Signed-off-by: Vedant Paranjape <vedantparanjape160201 at gmail.com>
> ---
>  src/gstreamer/gstlibcamerasrc.cpp | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/gstreamer/gstlibcamerasrc.cpp
> b/src/gstreamer/gstlibcamerasrc.cpp
> index 8b6057df..910c0f83 100644
> --- a/src/gstreamer/gstlibcamerasrc.cpp
> +++ b/src/gstreamer/gstlibcamerasrc.cpp
> @@ -375,9 +375,9 @@ gst_libcamera_src_task_enter(GstTask *task,
> [[maybe_unused]] GThread *thread,
>
>         /* Generate the stream configurations, there should be one per
> pad. */
>         state->config_ = state->cam_->generateConfiguration(roles);
> -       if (state->config_ == nullptr) {
> +       if (state->config_ == nullptr && state->config_->size() ==
> state->srcpads_.size()) {
>                 GST_ELEMENT_ERROR(self, RESOURCE, SETTINGS,
> -                                 ("Failed to generate camera
> configuration from roles"),
> +                                 ("Failed to generate camera
> configuration from"),
>                                   ("Camera::generateConfiguration()
> returned nullptr"));
>                 gst_task_stop(task);
>                 return;
> --
> 2.25.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210602/f5f5f1e6/attachment.htm>


More information about the libcamera-devel mailing list