[ros-diffs] [akhaldi] 53919: [ADVAPI32] * Sync CryptEnumProvidersW. Fixes some HKEY leaks. See issue #6237 for more details.

akhaldi at svn.reactos.org akhaldi at svn.reactos.org
Sat Oct 1 21:02:15 UTC 2011


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/crypt.c?rev=53919&r1=53918&r2=53919&view=diff
==============================================================================
--- 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;
 }
 
 /******************************************************************************




More information about the Ros-diffs mailing list