Eric Pouech : advpack: Plug a couple of memory leaks.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Oct 23 06:12:25 CDT 2006


Module: wine
Branch: master
Commit: ea2f60160c98456daf81b60119feecdc676d2bbb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ea2f60160c98456daf81b60119feecdc676d2bbb

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Sat Oct 21 08:49:10 2006 +0200

advpack: Plug a couple of memory leaks.

---

 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-cvs mailing list