[PATCH v2 4/4] [DNI] libcamera: pipeline_handler: Break the Yaml Emitter

Jacopo Mondi jacopo.mondi at ideasonboard.com
Mon Dec 2 14:34:03 CET 2024


Break the pipeline handler with an invalid API usage sequence
in pipeline_handler.cpp

ASSERT() for the presence of a valid parent_ reference in the YamlOutput
class hierarcy to trigger a visible error to users.

FATAL default yaml_emitter.cpp:578 assertion "parent_" failed in dict()
Backtrace: libcamera::YamlList::dict()+0xb4 (../src/libcamera/yaml_emitter.cpp:580)

Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
---
 src/libcamera/pipeline_handler.cpp |  1 +
 src/libcamera/yaml_emitter.cpp     | 42 +++++-------------------------
 2 files changed, 7 insertions(+), 36 deletions(-)

diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index e1ff6e6a5ce9..963a98e15894 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -818,6 +818,7 @@ void PipelineHandler::dumpConfiguration(const std::set<const Stream *> &streams,
 	/* \todo Dump Sensor configuration */
 
 	YamlList streamsList = configurationDict.list("streams");
+	YamlList thatsanono = configurationDict.list("shouldntbehere");
 
 	for (const auto &stream : streams) {
 		const StreamConfiguration &streamConfig = stream->configuration();
diff --git a/src/libcamera/yaml_emitter.cpp b/src/libcamera/yaml_emitter.cpp
index c0629e249c57..ed0367717e11 100644
--- a/src/libcamera/yaml_emitter.cpp
+++ b/src/libcamera/yaml_emitter.cpp
@@ -561,12 +561,7 @@ YamlList::~YamlList()
  */
 YamlList YamlList::list()
 {
-	if (!parent_) {
-		LOG(YamlEmitter, Error)
-			<< "Invalid usage of the YamlEmitter API. "
-			<< " The YAML output might not be correct.";
-		return {};
-	}
+	ASSERT(parent_);
 
 	int ret = emitSequenceStart();
 	if (ret)
@@ -580,12 +575,7 @@ YamlList YamlList::list()
  */
 YamlDict YamlList::dict()
 {
-	if (!parent_) {
-		LOG(YamlEmitter, Error)
-			<< "Invalid usage of the YamlEmitter API. "
-			<< " The YAML output might not be correct.";
-		return {};
-	}
+	ASSERT(parent_);
 
 	int ret = emitMappingStart();
 	if (ret)
@@ -600,12 +590,7 @@ YamlDict YamlList::dict()
  */
 void YamlList::scalar(std::string_view scalar)
 {
-	if (!parent_) {
-		LOG(YamlEmitter, Error)
-			<< "Invalid usage of the YamlEmitter API. "
-			<< " The YAML output might not be correct.";
-		return;
-	}
+	ASSERT(parent_);
 
 	emitScalar(scalar);
 }
@@ -652,12 +637,7 @@ YamlDict::~YamlDict()
  */
 YamlList YamlDict::list(std::string_view key)
 {
-	if (!parent_) {
-		LOG(YamlEmitter, Error)
-			<< "Invalid usage of the YamlEmitter API. "
-			<< " The YAML output might not be correct.";
-		return {};
-	}
+	ASSERT(parent_);
 
 	int ret = emitScalar(key);
 	if (ret)
@@ -677,12 +657,7 @@ YamlList YamlDict::list(std::string_view key)
  */
 YamlDict YamlDict::dict(std::string_view key)
 {
-	if (!parent_) {
-		LOG(YamlEmitter, Error)
-			<< "Invalid usage of the YamlEmitter API. "
-			<< " The YAML output might not be correct.";
-		return {};
-	}
+	ASSERT(parent_);
 
 	int ret = emitScalar(key);
 	if (ret)
@@ -702,12 +677,7 @@ YamlDict YamlDict::dict(std::string_view key)
  */
 void YamlDict::scalar(std::string_view key, std::string_view scalar)
 {
-	if (!parent_) {
-		LOG(YamlEmitter, Error)
-			<< "Invalid usage of the YamlEmitter API. "
-			<< " The YAML output might not be correct.";
-		return;
-	}
+	ASSERT(parent_);
 
 	int ret = emitScalar(key);
 	if (ret)
-- 
2.47.0



More information about the libcamera-devel mailing list