diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 1392cec..423bc03 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -62,6 +62,13 @@ else() endif() +# External plugins (*.fip) are loaded from the directory of the executable when the library is initialized. +# Disable it to prevent loading of any code which is not a part of the library itself. +option(FREEIMAGE_WITH_EXTERNAL_PLUGINS "Load external plugins (*.fip) at startup" ON) +if (FREEIMAGE_WITH_EXTERNAL_PLUGINS) + target_compile_definitions(FreeImage PUBLIC "-DFREEIMAGE_WITH_EXTERNAL_PLUGINS=1") +endif() + target_link_libraries(FreeImage PRIVATE LibYato) target_link_libraries(FreeImage PRIVATE LibZLIB) diff --git a/Source/FreeImage/FreeImage.cpp b/Source/FreeImage/FreeImage.cpp index a6a4c0e..efa4a68 100644 --- a/Source/FreeImage/FreeImage.cpp +++ b/Source/FreeImage/FreeImage.cpp @@ -37,6 +37,13 @@ static const char *s_copyright = "This program uses FreeImage, a free, open source image library supporting all common bitmap formats. See http://freeimage.sourceforge.net for details"; +// Loading of the external plugins (*.fip) at the library startup, see FREEIMAGE_WITH_EXTERNAL_PLUGINS in CMake +#if FREEIMAGE_WITH_EXTERNAL_PLUGINS +# define FREEIMAGE_LOAD_LOCAL_PLUGINS_ONLY FALSE +#else +# define FREEIMAGE_LOAD_LOCAL_PLUGINS_ONLY TRUE +#endif + //---------------------------------------------------------------------- #if defined(_WIN32) && !defined(__MINGW32__) @@ -46,7 +53,7 @@ FIBOOL APIENTRY DllMain(HANDLE hModule, uint32_t ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH : - FreeImage_Initialise(FALSE); + FreeImage_Initialise(FREEIMAGE_LOAD_LOCAL_PLUGINS_ONLY); break; case DLL_PROCESS_DETACH : @@ -72,7 +79,7 @@ void FreeImage_SO_Initialise() __attribute__((constructor)); void FreeImage_SO_DeInitialise() __attribute__((destructor)); void FreeImage_SO_Initialise() { - FreeImage_Initialise(FALSE); + FreeImage_Initialise(FREEIMAGE_LOAD_LOCAL_PLUGINS_ONLY); } void FreeImage_SO_DeInitialise() { diff --git a/Source/FreeImage/Plugin.cpp b/Source/FreeImage/Plugin.cpp index d8901be..e0f1c12 100644 --- a/Source/FreeImage/Plugin.cpp +++ b/Source/FreeImage/Plugin.cpp @@ -650,7 +650,7 @@ FreeImage_Initialise(FIBOOL load_local_plugins_only) { auto& plugins = PluginsRegistrySingleton::Instance(); if (plugins.AddRef()) { // external plugin initialization -#ifdef _WIN32 +#if defined(_WIN32) && FREEIMAGE_WITH_EXTERNAL_PLUGINS if (!load_local_plugins_only) { int count = 0; char buffer[MAX_PATH + 200]; @@ -706,7 +706,7 @@ FreeImage_Initialise(FIBOOL load_local_plugins_only) { SetCurrentDirectoryW(current_dir); } } -#endif // _WIN32 +#endif // _WIN32 && FREEIMAGE_WITH_EXTERNAL_PLUGINS } }