Author: akhaldi Date: Sat Oct 1 21:02:14 2011 New Revision: 53919
URL: http://svn.reactos.org/svn/reactos?rev=53919&view=rev Log: [ADVAPI32] * Sync CryptEnumProvidersW. Fixes some HKEY leaks. See issue #6237 for more details.
Modified: trunk/reactos/dll/win32/advapi32/crypt/crypt.c
Modified: trunk/reactos/dll/win32/advapi32/crypt/crypt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/crypt/cr... ============================================================================== --- trunk/reactos/dll/win32/advapi32/crypt/crypt.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/crypt/crypt.c [iso-8859-1] Sat Oct 1 21:02:14 2011 @@ -1104,6 +1104,7 @@ '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); @@ -1125,6 +1126,7 @@ return FALSE; }
+ ret = TRUE; if (!pszProvName) { DWORD numkeys; @@ -1136,6 +1138,7 @@ if (!(provNameW = CRYPT_Alloc(*pcbProvName * sizeof(WCHAR)))) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); + RegCloseKey(hKey); return FALSE; }
@@ -1147,7 +1150,7 @@ if (dwIndex >= numkeys) { SetLastError(ERROR_NO_MORE_ITEMS); - return FALSE; + ret = FALSE; } } else { DWORD size = sizeof(DWORD); @@ -1158,16 +1161,22 @@ 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; }
/******************************************************************************