[PATCH] added some return value checking
Marcus Meissner
marcus at jet.franken.de
Tue Feb 19 16:08:14 CST 2008
Hi,
Coverity reported an issue in secur32/ntlm.c
with the return value of NetWkstaUserGetInfo().
Trying to fix this up adding more checking to NetWkstaUserGetInfo().
Ciao, Marcus
---
dlls/netapi32/wksta.c | 31 ++++++++++++++++++++++---------
1 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/dlls/netapi32/wksta.c b/dlls/netapi32/wksta.c
index a72b18e..9a4d531 100644
--- a/dlls/netapi32/wksta.c
+++ b/dlls/netapi32/wksta.c
@@ -308,6 +308,8 @@ NetWkstaTransportEnum(LMSTR ServerName, DWORD level, PBYTE* pbuf,
NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
PBYTE* bufptr)
{
+ NET_API_STATUS nastatus;
+
TRACE("(%s, %d, %p)\n", debugstr_w(reserved), level, bufptr);
switch (level)
{
@@ -317,8 +319,10 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
DWORD dwSize = UNLEN + 1;
/* set up buffer */
- NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_0) + dwSize * sizeof(WCHAR),
+ nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_0) + dwSize * sizeof(WCHAR),
(LPVOID *) bufptr);
+ if (nastatus != NERR_Success)
+ return ERROR_NOT_ENOUGH_MEMORY;
ui = (PWKSTA_USER_INFO_0) *bufptr;
ui->wkui0_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_0));
@@ -329,11 +333,14 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
NetApiBufferFree(ui);
return ERROR_NOT_ENOUGH_MEMORY;
}
- else
- NetApiBufferReallocate(
+ else {
+ nastatus = NetApiBufferReallocate(
*bufptr, sizeof(WKSTA_USER_INFO_0) +
(lstrlenW(ui->wkui0_username) + 1) * sizeof(WCHAR),
(LPVOID *) bufptr);
+ if (nastatus != NERR_Success)
+ return nastatus;
+ }
break;
}
@@ -356,7 +363,9 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
/* get some information first to estimate size of the buffer */
ui0 = NULL;
- NetWkstaUserGetInfo(NULL, 0, (PBYTE *) &ui0);
+ nastatus = NetWkstaUserGetInfo(NULL, 0, (PBYTE *) &ui0);
+ if (nastatus != NERR_Success)
+ return nastatus;
username_sz = lstrlenW(ui0->wkui0_username) + 1;
ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));
@@ -376,10 +385,14 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
LsaClose(PolicyHandle);
/* set up buffer */
- NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1) +
+ nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1) +
(username_sz + logon_domain_sz +
oth_domains_sz + logon_server_sz) * sizeof(WCHAR),
(LPVOID *) bufptr);
+ if (nastatus != NERR_Success) {
+ NetApiBufferFree(ui0);
+ return nastatus;
+ }
ui = (WKSTA_USER_INFO_1 *) *bufptr;
ui->wkui1_username = (LMSTR) (*bufptr + sizeof(WKSTA_USER_INFO_1));
ui->wkui1_logon_domain = (LMSTR) (
@@ -414,9 +427,10 @@ NET_API_STATUS WINAPI NetWkstaUserGetInfo(LMSTR reserved, DWORD level,
/* FIXME see also wkui1_oth_domains for level 1 */
/* set up buffer */
- NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1101) + dwSize * sizeof(WCHAR),
+ nastatus = NetApiBufferAllocate(sizeof(WKSTA_USER_INFO_1101) + dwSize * sizeof(WCHAR),
(LPVOID *) bufptr);
-
+ if (nastatus != NERR_Success)
+ return nastatus;
ui = (PWKSTA_USER_INFO_1101) *bufptr;
ui->wkui1101_oth_domains = (LMSTR)(ui + 1);
@@ -442,10 +456,9 @@ NET_API_STATUS WINAPI NetpGetComputerName(LPWSTR *Buffer)
NetApiBufferAllocate(dwSize * sizeof(WCHAR), (LPVOID *) Buffer);
if (GetComputerNameW(*Buffer, &dwSize))
{
- NetApiBufferReallocate(
+ return NetApiBufferReallocate(
*Buffer, (dwSize + 1) * sizeof(WCHAR),
(LPVOID *) Buffer);
- return NERR_Success;
}
else
{
--
1.5.2.4
More information about the wine-patches
mailing list