Validate package pattern before checking for plugins (#525)

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 0af8c500ae)
This commit is contained in:
Jan 2023-07-29 22:48:24 +02:00 committed by GeckoEidechse
parent 6beb2b1a0a
commit 86c145c56c
2 changed files with 16 additions and 6 deletions

View file

@ -16,6 +16,7 @@
#include <string>
#include <sstream>
#include <vector>
#include <regex>
ModManager* g_pModManager;

View file

@ -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())