[libcamera-devel] [PATCH v2 10/24] libcamera: controls: Catch type mismatch in ControlInfoMap

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Nov 8 21:53:55 CET 2019


ControlInfoMap requires the ControlId and ControlRange of each entry to
have identical types. Check for this and log an error if a mismatch is
detected.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/libcamera/controls.cpp | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index eae0250a92e3..c488b2e4eb3f 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -571,8 +571,19 @@ ControlInfoMap::const_iterator ControlInfoMap::find(unsigned int id) const
 void ControlInfoMap::generateIdmap()
 {
 	idmap_.clear();
-	for (const auto &ctrl : *this)
+
+	for (const auto &ctrl : *this) {
+		if (ctrl.first->type() != ctrl.second.min().type()) {
+			LOG(Controls, Error)
+				<< "Control " << utils::hex(ctrl.first->id())
+				<< " type and range type mismatch";
+			idmap_.clear();
+			clear();
+			return;
+		}
+
 		idmap_[ctrl.first->id()] = ctrl.first;
+	}
 }
 
 /**
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list