Module: wine Branch: master Commit: 9ff41324ae33164a4bee90772a2ba5dfd5545c4a URL: https://gitlab.winehq.org/wine/wine/-/commit/9ff41324ae33164a4bee90772a2ba5d...
Author: Piotr Caban piotr@codeweavers.com Date: Fri May 24 13:11:56 2024 +0200
ntdll: Fix UNC path handling in alloc_module.
---
dlls/ntdll/loader.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c index 31bfe60d121..5c59d102dd9 100644 --- a/dlls/ntdll/loader.c +++ b/dlls/ntdll/loader.c @@ -1518,8 +1518,17 @@ static WINE_MODREF *alloc_module( HMODULE hModule, const UNICODE_STRING *nt_name InitializeListHead(&wm->ldr.DdagNode->Modules); InsertTailList(&wm->ldr.DdagNode->Modules, &wm->ldr.NodeModuleLink);
- memcpy( buffer, nt_name->Buffer + 4 /* ??\ prefix */, nt_name->Length - 4 * sizeof(WCHAR) ); - buffer[nt_name->Length/sizeof(WCHAR) - 4] = 0; + if (nt_name->Length >= 8 * sizeof(WCHAR) && !wcsncmp(nt_name->Buffer + 4, L"UNC\", 4)) + { + buffer[0] = '\'; + memcpy( buffer + 1, nt_name->Buffer + 7 /* ??\UNC prefix */, nt_name->Length - 7 * sizeof(WCHAR) ); + buffer[nt_name->Length/sizeof(WCHAR) - 6] = 0; + } + else + { + memcpy( buffer, nt_name->Buffer + 4 /* ??\ prefix */, nt_name->Length - 4 * sizeof(WCHAR) ); + buffer[nt_name->Length/sizeof(WCHAR) - 4] = 0; + } if ((p = wcsrchr( buffer, '\' ))) p++; else p = buffer; RtlInitUnicodeString( &wm->ldr.FullDllName, buffer );