[RFC PATCH 3/6] libcamera: yaml_parser: Increase sentinel to 100k

Umang Jain umang.jain at ideasonboard.com
Fri Jul 12 07:29:17 CEST 2024


From: Xavier Roumegue <xavier.roumegue at oss.nxp.com>

Instead of manually increasing the limit, prepare a constexpr
for maximum sentinel and use that instead.

Signed-off-by: Xavier Roumegue <xavier.roumegue at oss.nxp.com>
Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
---
 src/libcamera/yaml_parser.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
index 025006bc..09ed75f1 100644
--- a/src/libcamera/yaml_parser.cpp
+++ b/src/libcamera/yaml_parser.cpp
@@ -690,6 +690,8 @@ void YamlParserContext::readValue(std::string &value, EventPtr event)
 int YamlParserContext::parseDictionaryOrList(YamlObject::Type type,
 					     const std::function<int(EventPtr event)> &parseItem)
 {
+	constexpr unsigned int maxSentinel = 100000;
+
 	yaml_event_type_t endEventType = YAML_SEQUENCE_END_EVENT;
 	if (type == YamlObject::Type::Dictionary)
 		endEventType = YAML_MAPPING_END_EVENT;
@@ -698,7 +700,7 @@ int YamlParserContext::parseDictionaryOrList(YamlObject::Type type,
 	 * Add a safety counter to make sure we don't loop indefinitely in case
 	 * the YAML file is malformed.
 	 */
-	for (unsigned int sentinel = 2000; sentinel; sentinel--) {
+	for (unsigned int sentinel = maxSentinel; sentinel; sentinel--) {
 		auto evt = nextEvent();
 		if (!evt)
 			return -EINVAL;
@@ -711,8 +713,9 @@ int YamlParserContext::parseDictionaryOrList(YamlObject::Type type,
 			return ret;
 	}
 
-	LOG(YamlParser, Error) << "The YAML file contains a List or Dictionary"
-				  " whose size exceeds the parser's limit (1000)";
+	LOG(YamlParser, Error)
+		<< "The YAML file contains a List or Dictionary whose size exceeds"
+		<< " the parser's limit (" << maxSentinel << ")";
 
 	return -EINVAL;
 }
-- 
2.45.0



More information about the libcamera-devel mailing list