From 0f028db856f786415b57c8f8e82425573753cef7 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Fri, 25 Nov 2022 10:28:05 +0100 Subject: [PATCH] sys: Don't load any external plugins in debug builds Closes #833 --- main/source/init/tasks.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/main/source/init/tasks.cpp b/main/source/init/tasks.cpp index e7daeb437..d8a738b8b 100644 --- a/main/source/init/tasks.cpp +++ b/main/source/init/tasks.cpp @@ -230,10 +230,28 @@ namespace hex::init { return false; } + const auto shouldLoadPlugin = [executablePath = hex::fs::getExecutablePath()](const Plugin &plugin) { + #if !defined(DEBUG) + return true; + #endif + + if (!executablePath.has_value()) + return true; + + // In debug builds, ignore all plugins that are not part of the executable directory + return !std::fs::relative(plugin.getPath(), executablePath->parent_path()).string().starts_with(".."); + }; + u32 builtinPlugins = 0; u32 loadErrors = 0; for (const auto &plugin : plugins) { if (!plugin.isBuiltinPlugin()) continue; + + if (!shouldLoadPlugin(plugin)) { + log::debug("Skipping built-in plugin {}", plugin.getPath().string()); + continue; + } + builtinPlugins++; if (builtinPlugins > 1) continue; @@ -246,6 +264,11 @@ namespace hex::init { for (const auto &plugin : plugins) { if (plugin.isBuiltinPlugin()) continue; + if (!shouldLoadPlugin(plugin)) { + log::debug("Skipping plugin {}", plugin.getPath().string()); + continue; + } + if (!plugin.initializePlugin()) { log::error("Failed to initialize plugin {}", hex::toUTF8String(plugin.getPath().filename())); loadErrors++;