Hans Leidekker : mpr: Fix buffer size calculation in
WNetGetUniversalNameW.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Mar 26 08:12:47 CDT 2007
Module: wine
Branch: master
Commit: 82c154034445d8d6495bbe10601e3023a6c591da
URL: http://source.winehq.org/git/wine.git/?a=commit;h=82c154034445d8d6495bbe10601e3023a6c591da
Author: Hans Leidekker <hans at it.vu.nl>
Date: Sat Mar 24 17:32:02 2007 +0100
mpr: Fix buffer size calculation in WNetGetUniversalNameW.
---
dlls/mpr/wnet.c | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/dlls/mpr/wnet.c b/dlls/mpr/wnet.c
index f20e318..7419258 100644
--- a/dlls/mpr/wnet.c
+++ b/dlls/mpr/wnet.c
@@ -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);
More information about the wine-cvs
mailing list