[libcamera-devel] [PATCH v2] gstreamer: Add error checking in gst_libcamera_src_task_enter()
Vedant Paranjape
vedantparanjape160201 at gmail.com
Tue Jun 1 21:24:05 CEST 2021
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
More information about the libcamera-devel
mailing list