mpr: Fix buffer size calculation in WNetGetUniversalNameW.

This commit is contained in:
Hans Leidekker 2007-03-24 17:32:02 +01:00 committed by Alexandre Julliard
parent 03d637a305
commit 82c1540344
1 changed files with 14 additions and 10 deletions

View File

@ -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:
{
LPUNIVERSAL_NAME_INFOW info = (LPUNIVERSAL_NAME_INFOW)lpBuffer;
size = sizeof(*info) + (lstrlenW(lpLocalPath) + 1) * sizeof(WCHAR);
if (*lpBufferSize < size)
{
err = WN_MORE_DATA;
len = sizeof (*uniw) + lstrlenW(lpLocalPath);
if (*lpBufferSize <= len)
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);