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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Aug 3 00:36:42 CEST 2024


On Wed, Jul 24, 2024 at 03:13:21PM +0200, Jacopo Mondi wrote:
> I admin I have no idea how good or bad 100k is as a limit

Do we really need 100k ?

> On Fri, Jul 12, 2024 at 10:59:17AM GMT, Umang Jain wrote:
> > 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;

s/maxSentinel/kMaxSentinel/

static constexpr ?

> > +
> >  	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;
> >  }

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list