From 03fc204223a5da87b32b05a80978ce06a292bd10 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Thu, 3 Nov 2016 18:02:34 +0000 Subject: [PATCH] Throw if metadata file's root is not a YAML map Fixes #681. --- CMakeLists.txt | 2 +- src/backend/metadata_list.cpp | 5 ++++- src/tests/backend/metadata_list_test.h | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f35d62ce..ccf5175a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -101,7 +101,7 @@ set(PSEUDOSEM_INCLUDE_DIRS "${SOURCE_DIR}/include") ExternalProject_Add(testing-metadata PREFIX "external" - URL "https://github.com/loot/testing-metadata/archive/1.1.0.tar.gz" + URL "https://github.com/loot/testing-metadata/archive/1.2.0.tar.gz" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "") diff --git a/src/backend/metadata_list.cpp b/src/backend/metadata_list.cpp index 8cdcb642..7b743bbc 100644 --- a/src/backend/metadata_list.cpp +++ b/src/backend/metadata_list.cpp @@ -44,13 +44,16 @@ void MetadataList::Load(const boost::filesystem::path& filepath) { YAML::Node metadataList = YAML::Load(in); in.close(); + if (!metadataList.IsMap()) + throw FileAccessError("The root of the metadata file " + filepath.string() + " is not a YAML map."); + if (metadataList["plugins"]) { for (const auto& node : metadataList["plugins"]) { PluginMetadata plugin(node.as()); if (plugin.IsRegexPlugin()) regexPlugins_.push_back(plugin); else if (!plugins_.insert(plugin).second) - throw FileAccessError("More than one entry exists for \"" + plugin.Name() + "\""); + throw FileAccessError("More than one entry exists for \"" + plugin.Name() + "\""); } } if (metadataList["globals"]) diff --git a/src/tests/backend/metadata_list_test.h b/src/tests/backend/metadata_list_test.h index b0dc0a76..a31cea47 100644 --- a/src/tests/backend/metadata_list_test.h +++ b/src/tests/backend/metadata_list_test.h @@ -37,7 +37,9 @@ protected: metadataPath("./testing-metadata/masterlist.yaml"), savedMetadataPath("./testing-metadata/saved.masterlist.yaml"), missingMetadataPath("./missing-metadata.yaml"), - invalidMetadataPaths({"./testing-metadata/invalid/non_unique.yaml"}) {} + invalidMetadataPaths({ + "./testing-metadata/invalid/non_map_root.yaml", + "./testing-metadata/invalid/non_unique.yaml"}) {} inline virtual void SetUp() { CommonGameTestFixture::SetUp();