From da0c5b54f0d0162ff062292f3fae38238c186249 Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 21 Nov 2021 16:16:15 +0100 Subject: [PATCH] Load only supported content formats by EsmLoader --- apps/openmw_test_suite/esmloader/load.cpp | 23 +++++++++++++++++++++++ components/esmloader/load.cpp | 19 ++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/apps/openmw_test_suite/esmloader/load.cpp b/apps/openmw_test_suite/esmloader/load.cpp index 0f00847226..d6ed66f7a7 100644 --- a/apps/openmw_test_suite/esmloader/load.cpp +++ b/apps/openmw_test_suite/esmloader/load.cpp @@ -101,4 +101,27 @@ namespace EXPECT_EQ(esmData.mLands.size(), 0); EXPECT_EQ(esmData.mStatics.size(), 0); } + + TEST_F(EsmLoaderTest, loadEsmDataShouldSkipUnsupportedFormats) + { + Query query; + query.mLoadActivators = true; + query.mLoadCells = true; + query.mLoadContainers = true; + query.mLoadDoors = true; + query.mLoadGameSettings = true; + query.mLoadLands = true; + query.mLoadStatics = true; + const std::vector contentFiles {{"script.omwscripts"}}; + std::vector readers(contentFiles.size()); + ToUTF8::Utf8Encoder* const encoder = nullptr; + const EsmData esmData = loadEsmData(query, contentFiles, mFileCollections, readers, encoder); + EXPECT_EQ(esmData.mActivators.size(), 0); + EXPECT_EQ(esmData.mCells.size(), 0); + EXPECT_EQ(esmData.mContainers.size(), 0); + EXPECT_EQ(esmData.mDoors.size(), 0); + EXPECT_EQ(esmData.mGameSettings.size(), 0); + EXPECT_EQ(esmData.mLands.size(), 0); + EXPECT_EQ(esmData.mStatics.size(), 0); + } } diff --git a/components/esmloader/load.cpp b/components/esmloader/load.cpp index 9879f33274..42870989db 100644 --- a/components/esmloader/load.cpp +++ b/components/esmloader/load.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -206,10 +207,26 @@ namespace EsmLoader { ShallowContent result; + const std::set supportedFormats { + ".esm", + ".esp", + ".omwgame", + ".omwaddon", + ".project", + }; + for (std::size_t i = 0; i < contentFiles.size(); ++i) { const std::string &file = contentFiles[i]; - const Files::MultiDirCollection& collection = fileCollections.getCollection(boost::filesystem::path(file).extension().string()); + const std::string extension = boost::filesystem::path(file).extension().string(); + + if (supportedFormats.find(extension) == supportedFormats.end()) + { + Log(Debug::Warning) << "Skipping unsupported content file: " << file; + continue; + } + + const Files::MultiDirCollection& collection = fileCollections.getCollection(extension); ESM::ESMReader& reader = readers[i]; reader.setEncoder(encoder);