[PATCH] advapi32: remove a double free (Coverity)

Marcus Meissner marcus at jet.franken.de
Wed Oct 3 10:06:42 CDT 2012


Hi,

CID 713996

*pszTypeName could be freed twice if some condition was not met.

Ciao, Marcus
---
 dlls/advapi32/tests/crypt.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/dlls/advapi32/tests/crypt.c b/dlls/advapi32/tests/crypt.c
index 779d573..c85e86b 100644
--- a/dlls/advapi32/tests/crypt.c
+++ b/dlls/advapi32/tests/crypt.c
@@ -628,9 +628,6 @@ static BOOL FindProvTypesRegVals(DWORD *pdwIndex, DWORD *pdwProvType, LPSTR *psz
 
 		(*pdwIndex)++;
 	}
-
-	if (!ret)
-		LocalFree(*pszTypeName);
 	RegCloseKey(hSubKey);
 	LocalFree(szName);
 
@@ -837,8 +834,10 @@ static void test_get_default_provider(void)
 	/* alloc provName to half the size required
 	 * cbProvName holds the size required */
 	provNameSize = cbProvName / 2;
-	if (!(provName = LocalAlloc(LMEM_ZEROINIT, provNameSize)))
+	if (!(provName = LocalAlloc(LMEM_ZEROINIT, provNameSize))) {
+		LocalFree(pszProvName);
 		return;
+	}
 	
 	result = pCryptGetDefaultProviderA(provType, NULL, flags, provName, &provNameSize);
 	ok(!result && GetLastError()==ERROR_MORE_DATA, "expected %i, got %d\n",
@@ -851,8 +850,10 @@ static void test_get_default_provider(void)
 	ok(result && provNameSize==cbProvName, "expected %d, got %d\n", cbProvName, provNameSize);
 	provNameSize = cbProvName;
 	
-	if (!(provName = LocalAlloc(LMEM_ZEROINIT, provNameSize)))
+	if (!(provName = LocalAlloc(LMEM_ZEROINIT, provNameSize))) {
+		LocalFree(pszProvName);
 		return;
+	}
 	
 	provNameSize = 0xdeadbeef;
 	result = pCryptGetDefaultProviderA(provType, NULL, flags, provName, &provNameSize);
-- 
1.7.3.4




More information about the wine-patches mailing list