From 06db4d94fde745c39326fe5564b93348610a5674 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Wed, 10 Apr 2019 12:28:32 -0400 Subject: patch_manager: Add error checking to load dir to prevent crashes Prevents a crash if the load dir would be nullptr, instead logs an error and returns appropriately. --- src/core/file_sys/patch_manager.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/core/file_sys/patch_manager.cpp') diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp index a8f80e2c6..0a4f0ea74 100644 --- a/src/core/file_sys/patch_manager.cpp +++ b/src/core/file_sys/patch_manager.cpp @@ -187,6 +187,11 @@ std::vector PatchManager::PatchNSO(const std::vector& nso, const std::st LOG_INFO(Loader, "Patching NSO for name={}, build_id={}", name, build_id); const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id); + if (load_dir == nullptr) { + LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id); + return nso; + } + auto patch_dirs = load_dir->GetSubdirectories(); std::sort(patch_dirs.begin(), patch_dirs.end(), [](const VirtualDir& l, const VirtualDir& r) { return l->GetName() < r->GetName(); }); @@ -225,6 +230,11 @@ bool PatchManager::HasNSOPatch(const std::array& build_id_) const { LOG_INFO(Loader, "Querying NSO patch existence for build_id={}", build_id); const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id); + if (load_dir == nullptr) { + LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id); + return false; + } + auto patch_dirs = load_dir->GetSubdirectories(); std::sort(patch_dirs.begin(), patch_dirs.end(), [](const VirtualDir& l, const VirtualDir& r) { return l->GetName() < r->GetName(); }); @@ -259,6 +269,11 @@ static std::optional ReadCheatFileFromFolder(const Core::System& syst std::vector PatchManager::CreateCheatList(const Core::System& system, const std::array& build_id_) const { const auto load_dir = Service::FileSystem::GetModificationLoadRoot(title_id); + if (load_dir == nullptr) { + LOG_ERROR(Loader, "Cannot load mods for invalid title_id={:016X}", title_id); + return {}; + } + auto patch_dirs = load_dir->GetSubdirectories(); std::sort(patch_dirs.begin(), patch_dirs.end(), [](const VirtualDir& l, const VirtualDir& r) { return l->GetName() < r->GetName(); }); -- cgit v1.2.3