[libcamera-devel] [PATCH v3] libcamera: controls: validate all ControlInfo values
Christian Rauch
Rauch.Christian at gmx.de
Thu Sep 22 22:22:13 CEST 2022
ControlInfoMap::validate only checks the 'min' type against the ControlId
type. Extend this with checks against the 'max' type and the 'def' type,
if a default is specified. This forces the min/max bounds to have the same
type as the controlled value, but leaves the default optional.
Signed-off-by: Christian Rauch <Rauch.Christian at gmx.de>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
src/libcamera/controls.cpp | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index bc3db4f6..1e54a712 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -701,9 +701,32 @@ bool ControlInfoMap::validate()
? ControlTypeInteger32 : id->type();
const ControlInfo &info = ctrl.second;
+ if (!(info.min().isArray() == info.max().isArray() &&
+ info.min().numElements() == info.max().numElements())) {
+ LOG(Controls, Error)
+ << "Control " << id->name()
+ << " range must have the same dimension.";
+ return false;
+ }
+
+ if (info.min().type() != info.max().type()) {
+ LOG(Controls, Error)
+ << "Control " << id->name()
+ << " range types mismatch";
+ return false;
+ }
+
+ if (info.def().type() != ControlTypeNone &&
+ info.min().type() != info.def().type()) {
+ LOG(Controls, Error)
+ << "Control " << id->name()
+ << " default value and info type mismatch";
+ return false;
+ }
+
if (info.min().type() != rangeType) {
LOG(Controls, Error)
- << "Control " << utils::hex(id->id())
+ << "Control " << id->name()
<< " type and info type mismatch";
return false;
}
--
2.34.1
More information about the libcamera-devel
mailing list