Fix leak when processing the set cookie header
authorJonathon Jongsma <jonathon@quotidian.org>
Wed, 8 Dec 2010 05:09:31 +0000 (23:09 -0600)
committerJonathon Jongsma <jonathon@quotidian.org>
Fri, 10 Dec 2010 19:58:57 +0000 (13:58 -0600)
Valgrind trace:
==4617== 401 (96 direct, 305 indirect) bytes in 2 blocks are definitely lost in loss record 15,500 of 16,590
==4617==    at 0x4C244E8: malloc (vg_replace_malloc.c:236)
==4617==    by 0x103D73AA: g_malloc (gmem.c:164)
==4617==    by 0x103F0EB4: g_slice_alloc (gslice.c:842)
==4617==    by 0x103F0F0C: g_slice_alloc0 (gslice.c:854)
==4617==    by 0xE1CCD04: parse_one_cookie (soup-cookie.c:218)
==4617==    by 0xE1CD2B3: soup_cookies_from_response (soup-cookie.c:763)
==4617==    by 0xE1CE332: process_set_cookie_header (soup-cookie-jar.c:562)
==4617==    by 0xFB4AC36: g_cclosure_marshal_VOID__VOID (gmarshal.c:79)
==4617==    by 0xFB2F59E: g_closure_invoke (gclosure.c:766)
==4617==    by 0xFB4A2B1: signal_emit_unlocked_R (gsignal.c:3252)
==4617==    by 0xFB490EE: g_signal_emit_valist (gsignal.c:2983)
==4617==    by 0xFB4966C: g_signal_emit (gsignal.c:3040)
==4617==    by 0xE1DA0DF: io_read (soup-message-io.c:903)

https://bugzilla.gnome.org/show_bug.cgi?id=636741

libsoup/soup-cookie-jar.c

index 64afd9d..adb50ec 100644 (file)
@@ -563,11 +563,8 @@ process_set_cookie_header (SoupMessage *msg, gpointer user_data)
        for (nc = new_cookies; nc; nc = nc->next) {
                SoupURI *first_party = soup_message_get_first_party (msg);
                
-               if (first_party == NULL &&
-                   priv->accept_policy == SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY)
-                       continue; /* Can't check anything */
-
                if ((priv->accept_policy == SOUP_COOKIE_JAR_ACCEPT_NO_THIRD_PARTY &&
+                    first_party != NULL &&
                     soup_cookie_domain_matches (nc->data, first_party->host)) ||
                    priv->accept_policy == SOUP_COOKIE_JAR_ACCEPT_ALWAYS)
                        soup_cookie_jar_add_cookie (jar, nc->data);