Nikolay Sivov : advapi32/crypt: Fixed some HKEY leaks.
Alexandre Julliard
julliard at winehq.org
Thu Aug 4 12:22:10 CDT 2011
Module: wine
Branch: master
Commit: 322049cebf2c08875bfe8fe1d9d62ead6d856079
URL: http://source.winehq.org/git/wine.git/?a=commit;h=322049cebf2c08875bfe8fe1d9d62ead6d856079
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Aug 4 03:55:56 2011 +0400
advapi32/crypt: Fixed some HKEY leaks.
---
dlls/advapi32/crypt.c | 29 ++++++++++++++++++++++-------
1 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/dlls/advapi32/crypt.c b/dlls/advapi32/crypt.c
index 26fda66..f0f19ee 100644
--- a/dlls/advapi32/crypt.c
+++ b/dlls/advapi32/crypt.c
@@ -1124,6 +1124,7 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
'P','r','o','v','i','d','e','r',0
};
static const WCHAR typeW[] = {'T','y','p','e',0};
+ BOOL ret;
TRACE("(%d, %p, %d, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags,
pdwProvType, pszProvName, pcbProvName);
@@ -1145,6 +1146,7 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
return FALSE;
}
+ ret = TRUE;
if (!pszProvName)
{
DWORD numkeys;
@@ -1156,6 +1158,7 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
if (!(provNameW = CRYPT_Alloc(*pcbProvName * sizeof(WCHAR))))
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ RegCloseKey(hKey);
return FALSE;
}
@@ -1167,7 +1170,7 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
if (dwIndex >= numkeys)
{
SetLastError(ERROR_NO_MORE_ITEMS);
- return FALSE;
+ ret = FALSE;
}
} else {
DWORD size = sizeof(DWORD);
@@ -1178,16 +1181,22 @@ BOOL WINAPI CryptEnumProvidersW (DWORD dwIndex, DWORD *pdwReserved,
if (result)
{
SetLastError(result);
+ RegCloseKey(hKey);
return FALSE;
}
if (RegOpenKeyW(hKey, pszProvName, &subkey))
+ {
+ RegCloseKey(hKey);
return FALSE;
+ }
+
if (RegQueryValueExW(subkey, typeW, NULL, NULL, (BYTE*)pdwProvType, &size))
- return FALSE;
+ ret = FALSE;
+
RegCloseKey(subkey);
}
RegCloseKey(hKey);
- return TRUE;
+ return ret;
}
/******************************************************************************
@@ -1200,7 +1209,7 @@ BOOL WINAPI CryptEnumProvidersA (DWORD dwIndex, DWORD *pdwReserved,
{
PWSTR str = NULL;
DWORD bufsize;
- BOOL ret; /* = FALSE; */
+ BOOL ret;
TRACE("(%d, %p, %08x, %p, %p, %p)\n", dwIndex, pdwReserved, dwFlags,
pdwProvType, pszProvName, pcbProvName);
@@ -1287,19 +1296,24 @@ BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
if (dwIndex >= numkeys)
{
SetLastError(ERROR_NO_MORE_ITEMS);
+ RegCloseKey(hKey);
return FALSE;
}
keylen++;
if ( !(keyname = CRYPT_Alloc(keylen*sizeof(WCHAR))) )
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ RegCloseKey(hKey);
return FALSE;
}
if ( RegEnumKeyW(hKey, dwIndex, keyname, keylen) ) {
CRYPT_Free(keyname);
+ RegCloseKey(hKey);
return FALSE;
}
RegOpenKeyW(hKey, keyname, &hSubkey);
+ RegCloseKey(hKey);
+
ch = keyname + strlenW(keyname);
/* Convert "Type 000" to 0, etc/ */
*pdwProvType = *(--ch) - '0';
@@ -1311,11 +1325,11 @@ BOOL WINAPI CryptEnumProviderTypesW (DWORD dwIndex, DWORD *pdwReserved,
if (result)
{
SetLastError(result);
+ RegCloseKey(hSubkey);
return FALSE;
}
RegCloseKey(hSubkey);
- RegCloseKey(hKey);
return TRUE;
}
@@ -1502,6 +1516,8 @@ BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
CRYPT_Free(keyname);
result = RegQueryValueExW(hKey, nameW, NULL, NULL, (LPBYTE)pszProvName, pcbProvName);
+ RegCloseKey(hKey);
+
if (result)
{
if (result != ERROR_MORE_DATA)
@@ -1512,7 +1528,6 @@ BOOL WINAPI CryptGetDefaultProviderW (DWORD dwProvType, DWORD *pdwReserved,
return FALSE;
}
- RegCloseKey(hKey);
return TRUE;
}
@@ -1526,7 +1541,7 @@ BOOL WINAPI CryptGetDefaultProviderA (DWORD dwProvType, DWORD *pdwReserved,
{
PWSTR str = NULL;
DWORD bufsize;
- BOOL ret = FALSE;
+ BOOL ret;
TRACE("(%d, %p, %08x, %p, %p)\n", dwProvType, pdwReserved, dwFlags, pszProvName, pcbProvName);
More information about the wine-cvs
mailing list