From 2d8692c142c45f121a9f1d7d270a3df8f94fb044 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Thu, 4 Jan 2024 23:58:28 +0200 Subject: [PATCH] Throw "resource not found" instead of crashing on invalid query --- lib/modding/CModHandler.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/modding/CModHandler.cpp b/lib/modding/CModHandler.cpp index 4e039a1c1..1fe9d4b17 100644 --- a/lib/modding/CModHandler.cpp +++ b/lib/modding/CModHandler.cpp @@ -339,20 +339,25 @@ void CModHandler::loadModFilesystems() TModID CModHandler::findResourceOrigin(const ResourcePath & name) const { - for(const auto & modID : boost::adaptors::reverse(activeMods)) + try { - if(CResourceHandler::get(modID)->existsResource(name)) - return modID; + for(const auto & modID : boost::adaptors::reverse(activeMods)) + { + if(CResourceHandler::get(modID)->existsResource(name)) + return modID; + } + + if(CResourceHandler::get("core")->existsResource(name)) + return "core"; + + if(CResourceHandler::get("mapEditor")->existsResource(name)) + return "core"; // Workaround for loading maps via map editor } - - if(CResourceHandler::get("core")->existsResource(name)) - return "core"; - - if(CResourceHandler::get("mapEditor")->existsResource(name)) - return "core"; // Workaround for loading maps via map editor - - assert(0); - return ""; + catch( const std::out_of_range & e) + { + // no-op + } + throw std::runtime_error("Resource with name " + name.getName() + " and type " + EResTypeHelper::getEResTypeAsString(name.getType()) + " wasn't found."); } std::string CModHandler::getModLanguage(const TModID& modId) const