advapi32/crypt: Fixed some HKEY leaks.
This commit is contained in:
parent
e68b9f9fc9
commit
322049cebf
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue