aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan <sentrycraft123@gmail.com>2023-07-29 22:48:24 +0200
committerGeckoEidechse <gecko.eidechse+git@pm.me>2023-07-29 22:58:40 +0200
commit86c145c56c2faf48f129bd44b31fb87b9bd8eb55 (patch)
tree87b0e7f6ef103ea9d2bd1b6357e2655f6f4a770f
parent6beb2b1a0a93263e16a6f5a555d76e12b51ca94f (diff)
downloadNorthstarLauncher-86c145c56c2faf48f129bd44b31fb87b9bd8eb55.tar.gz
NorthstarLauncher-86c145c56c2faf48f129bd44b31fb87b9bd8eb55.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.cpp1
-rw-r--r--NorthstarDLL/plugins/plugins.cpp21
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())