[PATCH] libcamera: yaml_parser: Output more details when parsing fails

Stefan Klug stefan.klug at ideasonboard.com
Fri Dec 6 08:04:44 CET 2024


Hi Laurent,

Thank you for the review. 

On Thu, Dec 05, 2024 at 10:12:43PM +0200, Laurent Pinchart wrote:
> Hi Stefan,
> 
> Thank you for the patch.
> 
> On Wed, Dec 04, 2024 at 12:10:13PM +0100, Stefan Klug wrote:
> > On malformed yaml files, the yaml parser only errors out without giving
> > details on the error that happened. Fix that by providing a more detailed
> > error message.
> > 
> > Output old:
> > 
> > ERROR YamlParser yaml_parser.cpp:886 Failed to parse YAML content from /root/imx283.yaml
> > 
> > Output new:
> > 
> > ERROR YamlParser yaml_parser.cpp:627 /root/imx283.yaml:72:8 could not find expected ':' while scanning a simple key
> > ERROR YamlParser yaml_parser.cpp:886 Failed to parse YAML content from /root/imx283.yaml
> > 
> > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > ---
> >  src/libcamera/yaml_parser.cpp | 11 ++++++++++-
> >  1 file changed, 10 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp
> > index db256ec5b04d..f9302c4ee3fa 100644
> > --- a/src/libcamera/yaml_parser.cpp
> > +++ b/src/libcamera/yaml_parser.cpp
> > @@ -509,8 +509,17 @@ YamlParserContext::EventPtr YamlParserContext::nextEvent()
> 
> I wonder what else you have in your tree if the message prints line 627,
> as indicated in the example in the commit message :-)

Interesting indeed. I checked the logs. The patch was written just
before you merged the "Use std::from_chars()" cleanup that removed quite
some code. I guess that explains the difference.

Regards,
Stefan

> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> 
> >  	EventPtr event(new yaml_event_t);
> >  
> >  	/* yaml_parser_parse returns 1 when it succeeds */
> > -	if (!yaml_parser_parse(&parser_, event.get()))
> > +	if (!yaml_parser_parse(&parser_, event.get())) {
> > +		File *file = static_cast<File *>(parser_.read_handler_data);
> > +
> > +		LOG(YamlParser, Error) << file->fileName() << ":"
> > +				       << parser_.problem_mark.line << ":"
> > +				       << parser_.problem_mark.column << " "
> > +				       << parser_.problem << " "
> > +				       << parser_.context;
> > +
> >  		return nullptr;
> > +	}
> >  
> >  	return event;
> >  }
> 
> -- 
> Regards,
> 
> Laurent Pinchart


More information about the libcamera-devel mailing list