Jacek Caban : wininet: Free all cookie data in free_cookie.

Alexandre Julliard julliard at winehq.org
Wed Jul 6 09:57:32 CDT 2016


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jul  6 13:43:35 2016 +0200

wininet: Free all cookie data in free_cookie.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wininet/cookie.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/dlls/wininet/cookie.c b/dlls/wininet/cookie.c
index 38f69e0..3240633 100644
--- a/dlls/wininet/cookie.c
+++ b/dlls/wininet/cookie.c
@@ -684,6 +684,33 @@ DWORD get_cookie_header(const WCHAR *host, const WCHAR *path, WCHAR **ret)
     return res;
 }
 
+static void free_cookie_domain_list(struct list *list)
+{
+    cookie_container_t *container;
+    cookie_domain_t *domain;
+
+    while(!list_empty(list)) {
+        domain = LIST_ENTRY(list_next(list, list), cookie_domain_t, entry);
+
+        free_cookie_domain_list(&domain->subdomain_list);
+
+        while(!list_empty(&domain->path_list)) {
+            container = LIST_ENTRY(list_next(&domain->path_list, &domain->path_list), cookie_container_t, entry);
+
+            while(!list_empty(&container->cookie_list))
+                delete_cookie(LIST_ENTRY(list_next(&container->cookie_list, &container->cookie_list), cookie_t, entry));
+
+            heap_free(container->cookie_url);
+            list_remove(&container->entry);
+            heap_free(container);
+        }
+
+        heap_free(domain->domain);
+        list_remove(&domain->entry);
+        heap_free(domain);
+    }
+}
+
 /***********************************************************************
  *           InternetGetCookieExW (WININET.@)
  *
@@ -1239,5 +1266,9 @@ BOOL WINAPI InternetSetPerSiteCookieDecisionW( LPCWSTR pchHostName, DWORD dwDeci
 
 void free_cookie(void)
 {
-    DeleteCriticalSection(&cookie_cs);
+    EnterCriticalSection(&cookie_cs);
+
+    free_cookie_domain_list(&domain_list);
+
+    LeaveCriticalSection(&cookie_cs);
 }




More information about the wine-cvs mailing list