Commit 82c15403 authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

mpr: Fix buffer size calculation in WNetGetUniversalNameW.

parent 03d637a3
......@@ -1713,8 +1713,7 @@ DWORD WINAPI WNetGetUniversalNameA ( LPCSTR lpLocalPath, DWORD dwInfoLevel,
DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel,
LPVOID lpBuffer, LPDWORD lpBufferSize )
{
LPUNIVERSAL_NAME_INFOW uniw;
DWORD err, len;
DWORD err, size;
FIXME( "(%s, 0x%08X, %p, %p): stub\n",
debugstr_w(lpLocalPath), dwInfoLevel, lpBuffer, lpBufferSize);
......@@ -1722,23 +1721,28 @@ DWORD WINAPI WNetGetUniversalNameW ( LPCWSTR lpLocalPath, DWORD dwInfoLevel,
switch (dwInfoLevel)
{
case UNIVERSAL_NAME_INFO_LEVEL:
err = WN_MORE_DATA;
len = sizeof (*uniw) + lstrlenW(lpLocalPath);
if (*lpBufferSize <= len)
{
LPUNIVERSAL_NAME_INFOW info = (LPUNIVERSAL_NAME_INFOW)lpBuffer;
size = sizeof(*info) + (lstrlenW(lpLocalPath) + 1) * sizeof(WCHAR);
if (*lpBufferSize < size)
{
err = WN_MORE_DATA;
break;
uniw = lpBuffer;
uniw->lpUniversalName = (LPWSTR) &uniw[1];
lstrcpyW(uniw->lpUniversalName, lpLocalPath);
*lpBufferSize = len;
}
info->lpUniversalName = (LPWSTR)((char *)info + sizeof(*info));
lstrcpyW(info->lpUniversalName, lpLocalPath);
*lpBufferSize = size;
err = WN_NO_ERROR;
break;
}
case REMOTE_NAME_INFO_LEVEL:
err = WN_NO_NETWORK;
break;
default:
err = WN_BAD_VALUE;
break;
}
SetLastError(err);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment