diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 93ad2fc6a276..0c7cd449ad64 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -491,7 +491,11 @@ const ControlInfoMap::mapped_type &ControlInfoMap::at(unsigned int id) const
  */
 ControlInfoMap::size_type ControlInfoMap::count(unsigned int id) const
 {
-	return count(idmap_.at(id));
+	auto iter = idmap_.find(id);
+	if (iter == idmap_.end())
+		return 0;
+
+	return count(iter->second);
 }
 
 /**
@@ -502,7 +506,11 @@ ControlInfoMap::size_type ControlInfoMap::count(unsigned int id) const
  */
 ControlInfoMap::iterator ControlInfoMap::find(unsigned int id)
 {
-	return find(idmap_.at(id));
+	auto iter = idmap_.find(id);
+	if (iter == idmap_.end())
+		return end();
+
+	return find(iter->second);
 }
 
 /**
@@ -513,7 +521,11 @@ ControlInfoMap::iterator ControlInfoMap::find(unsigned int id)
  */
 ControlInfoMap::const_iterator ControlInfoMap::find(unsigned int id) const
 {
-	return find(idmap_.at(id));
+	auto iter = idmap_.find(id);
+	if (iter == idmap_.end())
+		return end();
+
+	return find(iter->second);
 }
 
 /**
