MINGW-packages/mingw-w64-python/0102-LoadLibraryExW-make-sure-to-only-use-backslashes-for.patch
2025-06-07 14:11:54 +02:00

48 lines
1.7 KiB
Diff

From 8d63ba224d93b0c130a08c8b149ca53fafbb16a2 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Sun, 27 Aug 2023 16:04:50 +0200
Subject: [PATCH 102/N] LoadLibraryExW: make sure to only use backslashes for
paths
It seems like in case the path passed to it is absolute, but contains
forward slashes then LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR does not work
and DLLs in the same directory as the extension are not considered.
This occurs in our fork because in MSYS2-mode the extension loader will
normalize to forward slashes before.
Normalize everything to backslashes again before passing it to LoadLibraryExW.
Fixes #151
---
Python/dynload_win.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 36d1c7a..caa4968 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -252,10 +252,22 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
_Py_CheckPython3();
#endif /* _MSC_VER */
+// So we can adjust the separators in the path below
+#define USE_UNICODE_WCHAR_CACHE 0
+
wchar_t *wpathname = PyUnicode_AsWideCharString(pathname, NULL);
if (wpathname == NULL)
return NULL;
+ // LoadLibraryExW only considers paths using backslashes as "fully qualified",
+ // and for example LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR doesn't work with forward slashes.
+ // https://github.com/msys2-contrib/cpython-mingw/issues/151
+ for (size_t i = 0; wpathname[i] != L'\0'; ++i) {
+ if (wpathname[i] == L'/') {
+ wpathname[i] = L'\\';
+ }
+ }
+
PyOS_snprintf(funcname, sizeof(funcname), "%.20s_%.200s", prefix, shortname);
{