From 2a1bb88e9019c7161d2f8cb16031c88855057e57 Mon Sep 17 00:00:00 2001 From: Kenzzer <14257866+kenzzer@users.noreply.github.com> Date: Thu, 3 Apr 2025 13:30:30 +0000 Subject: [PATCH] Add safetyhook to load logic --- core/logic_bridge.cpp | 14 +++++++++++++- core/provider.h | 1 + tools/buildbot/PackageScript | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/core/logic_bridge.cpp b/core/logic_bridge.cpp index 4e0e8d88a..550f55b00 100644 --- a/core/logic_bridge.cpp +++ b/core/logic_bridge.cpp @@ -676,6 +676,19 @@ void CoreProviderImpl::InitializeBridge() bool CoreProviderImpl::LoadBridge(char *error, size_t maxlength) { char file[PLATFORM_MAX_PATH]; + char myerror[255]; + + /* Load safetyhook first. The core & extensions might depend on it */ + g_SMAPI->PathFormat(file, + sizeof(file), + "%s/bin/" PLATFORM_ARCH_FOLDER "safetyhook." PLATFORM_LIB_EXT, + g_SourceMod.GetSourceModPath()); + + safetyhook_ = ke::SharedLib::Open(file, myerror, sizeof(myerror)); + if (!safetyhook_) { + ke::SafeSprintf(error, maxlength, "failed to load %s: %s", file, myerror); + return false; + } /* Now it's time to load the logic binary */ g_SMAPI->PathFormat(file, @@ -683,7 +696,6 @@ bool CoreProviderImpl::LoadBridge(char *error, size_t maxlength) "%s/bin/" PLATFORM_ARCH_FOLDER "sourcemod.logic." PLATFORM_LIB_EXT, g_SourceMod.GetSourceModPath()); - char myerror[255]; logic_ = ke::SharedLib::Open(file, myerror, sizeof(myerror)); if (!logic_) { ke::SafeSprintf(error, maxlength, "failed to load %s: %s", file, myerror); diff --git a/core/provider.h b/core/provider.h index a1ad393fe..cb4546c11 100644 --- a/core/provider.h +++ b/core/provider.h @@ -76,6 +76,7 @@ public: } private: + ke::RefPtr safetyhook_; ke::RefPtr logic_; LogicInitFunction logic_init_; GameHooks hooks_; diff --git a/tools/buildbot/PackageScript b/tools/buildbot/PackageScript index 14d77b5d0..976f340ad 100644 --- a/tools/buildbot/PackageScript +++ b/tools/buildbot/PackageScript @@ -50,6 +50,13 @@ helpers = SM.package_helpers helpers.builder = builder folder_map = helpers.CreateFolders(folder_list) +# Copy safetyhook +for cxx_task in SM.libsafetyhook: + if cxx_task.target.arch == 'x86_64' in cxx_task.binary.path: + builder.AddCopy(cxx_task.binary, folder_map['addons/sourcemod/bin/x64']) + else: + builder.AddCopy(cxx_task.binary, folder_map['addons/sourcemod/bin']) + # Copy binaries. for cxx_task in SM.binaries: # mms expects our loader (sourcemod_mm) to exist in /bin/