secur32: Fix memory leak in SECUR32_addPackages. (valgrind) [try 2]

Lei Zhang thestig at google.com
Thu Dec 17 03:57:05 CST 2009


Hi, this is for bug 21045. I'm using the LIST_FOR_EACH_ENTRY_SAFE
macro and removed the if (pointer != NULL) check before HeapFree().
-------------- next part --------------
From fcc6ef29cb2fc99a71e1703a1927e5bd9e60c920 Mon Sep 17 00:00:00 2001
From: Lei Zhang <thestig at google.com>
Date: Thu, 17 Dec 2009 01:53:38 -0800
Subject: [PATCH] secur32: Fix memory leak in SECUR32_addPackages. (valgrind)

---
 dlls/secur32/secur32.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/dlls/secur32/secur32.c b/dlls/secur32/secur32.c
index 4171778..f626617 100644
--- a/dlls/secur32/secur32.c
+++ b/dlls/secur32/secur32.c
@@ -666,9 +666,6 @@ SecurePackage *SECUR32_findPackageA(PCSTR packageName)
 
 static void SECUR32_freeProviders(void)
 {
-    SecurePackage *package;
-    SecureProvider *provider;
-
     TRACE("\n");
     EnterCriticalSection(&cs);
 
@@ -676,10 +673,13 @@ static void SECUR32_freeProviders(void)
 
     if (packageTable)
     {
-        LIST_FOR_EACH_ENTRY(package, &packageTable->table, SecurePackage, entry)
+        SecurePackage *package, *package_next;
+        LIST_FOR_EACH_ENTRY_SAFE(package, package_next, &packageTable->table,
+                                 SecurePackage, entry)
         {
             HeapFree(GetProcessHeap(), 0, package->infoW.Name);
             HeapFree(GetProcessHeap(), 0, package->infoW.Comment);
+            HeapFree(GetProcessHeap(), 0, package);
         }
 
         HeapFree(GetProcessHeap(), 0, packageTable);
@@ -688,11 +688,14 @@ static void SECUR32_freeProviders(void)
 
     if (providerTable)
     {
-        LIST_FOR_EACH_ENTRY(provider, &providerTable->table, SecureProvider, entry)
+        SecureProvider *provider, *provider_next;
+        LIST_FOR_EACH_ENTRY_SAFE(provider, provider_next, &providerTable->table,
+                                 SecureProvider, entry)
         {
             HeapFree(GetProcessHeap(), 0, provider->moduleName);
             if (provider->lib)
                 FreeLibrary(provider->lib);
+            HeapFree(GetProcessHeap(), 0, provider);
         }
 
         HeapFree(GetProcessHeap(), 0, providerTable);
-- 
1.5.4.3


More information about the wine-patches mailing list