diff options
author | Jan <sentrycraft123@gmail.com> | 2023-07-29 22:48:24 +0200 |
---|---|---|
committer | GeckoEidechse <gecko.eidechse+git@pm.me> | 2023-07-29 22:58:40 +0200 |
commit | 86c145c56c2faf48f129bd44b31fb87b9bd8eb55 (patch) | |
tree | 87b0e7f6ef103ea9d2bd1b6357e2655f6f4a770f | |
parent | 6beb2b1a0a93263e16a6f5a555d76e12b51ca94f (diff) | |
download | NorthstarLauncher-1.17.X.tar.gz NorthstarLauncher-1.17.X.zip |
Validate package pattern before checking for plugins (#525)v1.17.3-rc1v1.17.31.17.X
Adds missing validation check to ensure that the package folder the plugin is included in matches the `AUTHOR-MOD-VERSION` pattern.
(cherry picked from commit 0af8c500aecb2eca77996e9ef750589fceb7245b)
-rw-r--r-- | NorthstarDLL/mods/modmanager.cpp | 1 | ||||
-rw-r--r-- | NorthstarDLL/plugins/plugins.cpp | 21 |
2 files changed, 16 insertions, 6 deletions
diff --git a/NorthstarDLL/mods/modmanager.cpp b/NorthstarDLL/mods/modmanager.cpp index bf63fc41..044ec6d4 100644 --- a/NorthstarDLL/mods/modmanager.cpp +++ b/NorthstarDLL/mods/modmanager.cpp @@ -16,6 +16,7 @@ #include <string> #include <sstream> #include <vector> +#include <regex> ModManager* g_pModManager; diff --git a/NorthstarDLL/plugins/plugins.cpp b/NorthstarDLL/plugins/plugins.cpp index 6ccd348e..0c4c7fd6 100644 --- a/NorthstarDLL/plugins/plugins.cpp +++ b/NorthstarDLL/plugins/plugins.cpp @@ -7,6 +7,7 @@ #include "core/convar/convar.h" #include "server/serverpresence.h" #include <optional> +#include <regex> #include "util/version.h" #include "pluginbackend.h" @@ -215,7 +216,7 @@ bool PluginManager::LoadPlugins() std::vector<fs::path> paths; - pluginPath = GetNorthstarPrefix() + "/plugins"; + pluginPath = GetNorthstarPrefix() + "\\plugins"; PluginNorthstarData data {}; std::string ns_version {version}; @@ -232,12 +233,20 @@ bool PluginManager::LoadPlugins() FindPlugins(pluginPath, paths); - // Special case for Thunderstore plugin dirs - - for (fs::directory_entry dir : fs::directory_iterator(GetThunderstoreModFolderPath())) + // Special case for Thunderstore mods dir + std::filesystem::directory_iterator thunderstoreModsDir = fs::directory_iterator(GetThunderstoreModFolderPath()); + // Set up regex for `AUTHOR-MOD-VERSION` pattern + std::regex pattern(R"(.*\\([a-zA-Z0-9_]+)-([a-zA-Z0-9_]+)-(\d+\.\d+\.\d+))"); + for (fs::directory_entry dir : thunderstoreModsDir) { - fs::path pluginDir = dir.path() / "plugins"; - FindPlugins(pluginDir, paths); + fs::path pluginsDir = dir.path() / "plugins"; + // Use regex to match `AUTHOR-MOD-VERSION` pattern + if (!std::regex_match(dir.path().string(), pattern)) + { + spdlog::warn("The following directory did not match 'AUTHOR-MOD-VERSION': {}", dir.path().string()); + continue; // skip loading package that doesn't match + } + FindPlugins(pluginsDir, paths); } if (paths.empty()) |