mpr: Fix buffer size calculation in WNetGetUniversalNameW.
This commit is contained in:
parent
03d637a305
commit
82c1540344
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue