[PATCH] [Advpack]: leaks

Eric Pouech eric.pouech at wanadoo.fr
Sat Oct 21 01:49:10 CDT 2006


- plug a couple of memory leaks

A+
---

 dlls/advpack/advpack.c |    9 +++++----
 dlls/advpack/files.c   |   16 ++++++++++++++++
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/dlls/advpack/advpack.c b/dlls/advpack/advpack.c
index 154f234..4f37fad 100644
--- a/dlls/advpack/advpack.c
+++ b/dlls/advpack/advpack.c
@@ -710,6 +710,7 @@ HRESULT WINAPI TranslateInfStringW(LPCWS
                 DWORD dwBufferSize, PDWORD pdwRequiredSize, PVOID pvReserved)
 {
     HINF hInf;
+    HRESULT hret = S_OK;
 
     TRACE("(%s, %s, %s, %s, %p, %d, %p, %p)\n",
           debugstr_w(pszInfFilename), debugstr_w(pszInstallSection),
@@ -730,13 +731,13 @@ HRESULT WINAPI TranslateInfStringW(LPCWS
                            pszBuffer, dwBufferSize, pdwRequiredSize))
     {
         if (dwBufferSize < *pdwRequiredSize)
-            return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
-
-        return SPAPI_E_LINE_NOT_FOUND;
+            hret = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+        else
+            hret = SPAPI_E_LINE_NOT_FOUND;
     }
 
     SetupCloseInfFile(hInf);
-    return S_OK;
+    return hret;
 }
 
 /***********************************************************************
diff --git a/dlls/advpack/files.c b/dlls/advpack/files.c
index de39bba..df7b06d 100644
--- a/dlls/advpack/files.c
+++ b/dlls/advpack/files.c
@@ -573,7 +573,10 @@ static LPSTR convert_file_list(LPCSTR Fi
 
     /* empty list */
     if (!lstrlenA(szConvertedList))
+    {
+        HeapFree(GetProcessHeap(), 0, szConvertedList);
         return NULL;
+    }
         
     *dwNumFiles = 1;
 
@@ -744,6 +747,19 @@ HRESULT WINAPI ExtractFilesA(LPCSTR CabN
     extractDest.flags |= EXTRACT_EXTRACTFILES;
     res = pExtract(&extractDest, CabName);
 
+    if (extractDest.filelist)
+    {
+        struct ExtractFileList* curr = extractDest.filelist;
+        struct ExtractFileList* next;
+
+        while (curr)
+        {
+            next = curr->next;
+            free_file_node(curr);
+            curr = next;
+        }
+    }
+
 done:
     FreeLibrary(hCabinet);
     HeapFree(GetProcessHeap(), 0, szConvertedList);



More information about the wine-patches mailing list