cabinet/tests: Fix some memory leaks (Try 2)

Andrew Talbot Andrew.Talbot at talbotville.com
Tue Sep 12 18:14:00 CDT 2006


Please use this one: the first effort had a fatal typo in it.

Thanks,

-- Andy.
---
Changelog:
    cabinet/tests: Fix some memory leaks.

diff -urN a/dlls/cabinet/tests/extract.c b/dlls/cabinet/tests/extract.c
--- a/dlls/cabinet/tests/extract.c	2006-09-12 11:58:07.000000000 +0100
+++ b/dlls/cabinet/tests/extract.c	2006-09-13 00:04:19.000000000 +0100
@@ -334,6 +334,33 @@
     return FALSE;
 }
 
+static void remove_filelist_item(EXTRACTDEST *extractDest, struct ExtractFileList *item)
+{
+    struct ExtractFileList *p1, *p2;
+
+    for (p1 = extractDest->filelist; p1 != NULL && p1 != item && p1->next != item; p1 = p1->next)
+        ; /* VOID */
+
+    if (p1 == NULL)
+        return;
+
+    p2 = p1->next;
+
+    if (p1 == extractDest->filelist)
+    {
+        extractDest->filelist = p2;
+        free(p1->filename);
+        free(p1);
+    }
+    else
+    {
+        p1->next = p2->next;
+        free(p2->filename);
+        free(p2);
+    }
+}
+
+
 static void test_Extract(void)
 {
     EXTRACTDEST extractDest;
@@ -392,8 +419,8 @@
     ok(check_list(&extractDest, "a.txt", FALSE), "list entry wrong\n");
 
     /* remove two of the files in the list */
-    extractDest.filelist->next = extractDest.filelist->next->next;
-    extractDest.filelist->next->next = NULL;
+    remove_filelist_item(&extractDest, extractDest.filelist->next);
+    remove_filelist_item(&extractDest, extractDest.filelist->next->next);
     extractDest.filterlist = NULL;
     CreateDirectoryA("dest", NULL);
     res = pExtract(&extractDest, "extract.cab");
@@ -457,6 +484,10 @@
 
     ok(RemoveDirectoryA("dest\\testdir"), "Expected dest\\testdir to exist\n");
     ok(RemoveDirectoryA("dest"), "Expected dest\\testdir to exist\n");
+
+    /* release used memory */
+    while (extractDest.filelist != NULL)
+        remove_filelist_item(&extractDest, extractDest.filelist);
 }
 
 START_TEST(extract)



More information about the wine-patches mailing list