diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2021-04-13 14:31:45 +0200 |
---|---|---|
committer | Carlos Garcia Campos <cgarcia@igalia.com> | 2021-04-13 16:05:41 +0200 |
commit | 48f07d3fe9254520dc7371666fb517e7aa201aeb (patch) | |
tree | c95520afaf86119287adb9fb327871fe2c254806 | |
parent | c4c2cd113c7fa06c3573e8945f186abecb8fd278 (diff) | |
download | libsoup-carlosgc/cookies-non-http-uris.tar.gz |
cookies: allow non-HTTP uris for cookiescarlosgc/cookies-non-http-uris
It's supported for WebKit and partially allowed by soup 2.4, so better keep
compatibility here.
-rw-r--r-- | libsoup/cookies/soup-cookie-jar.c | 12 | ||||
-rw-r--r-- | libsoup/cookies/soup-cookie.c | 12 | ||||
-rw-r--r-- | libsoup/soup-message.c | 3 |
3 files changed, 17 insertions, 10 deletions
diff --git a/libsoup/cookies/soup-cookie-jar.c b/libsoup/cookies/soup-cookie-jar.c index afa3bcc1..8deccb0f 100644 --- a/libsoup/cookies/soup-cookie-jar.c +++ b/libsoup/cookies/soup-cookie-jar.c @@ -321,7 +321,7 @@ get_cookies (SoupCookieJar *jar, priv = soup_cookie_jar_get_instance_private (jar); - if (!host || !host[0]) + if (!host) return NULL; /* The logic here is a little weird, but the plan is that if @@ -330,8 +330,14 @@ get_cookies (SoupCookieJar *jar, * ".com", in that order. (Logic stolen from Mozilla.) */ cookies = NULL; - domain = cur = g_strdup_printf (".%s", host); - next_domain = domain + 1; + if (host[0]) { + domain = cur = g_strdup_printf (".%s", host); + next_domain = domain + 1; + } else { + domain = cur = g_strdup (host); + next_domain = NULL; + } + do { new_head = domain_cookies = g_hash_table_lookup (priv->domains, cur); while (domain_cookies) { diff --git a/libsoup/cookies/soup-cookie.c b/libsoup/cookies/soup-cookie.c index f11df16b..2aa3fed9 100644 --- a/libsoup/cookies/soup-cookie.c +++ b/libsoup/cookies/soup-cookie.c @@ -175,9 +175,7 @@ parse_one_cookie (const char *header, GUri *origin) { const char *start, *end, *p; gboolean has_value; - SoupCookie *cookie; - - g_return_val_if_fail (origin == NULL || SOUP_URI_IS_VALID (origin), NULL); + SoupCookie *cookie; cookie = g_slice_new0 (SoupCookie); @@ -394,7 +392,7 @@ soup_cookie_new (const char *name, const char *value, /** * soup_cookie_parse: * @header: a cookie string (eg, the value of a Set-Cookie header) - * @origin: origin of the cookie, or %NULL + * @origin: (nullable): origin of the cookie, or %NULL * * Parses @header and returns a #SoupCookie. (If @header contains * multiple cookies, only the first one will be parsed.) @@ -414,6 +412,9 @@ soup_cookie_new (const char *name, const char *value, SoupCookie * soup_cookie_parse (const char *cookie, GUri *origin) { + g_return_val_if_fail (cookie != NULL, NULL); + g_return_val_if_fail (origin == NULL || g_uri_get_host (origin) != NULL, NULL); + return parse_one_cookie (cookie, origin); } @@ -1061,7 +1062,8 @@ soup_cookie_applies_to_uri (SoupCookie *cookie, GUri *uri) { int plen; - g_return_val_if_fail (SOUP_URI_IS_VALID (uri), FALSE); + g_return_val_if_fail (cookie != NULL, FALSE); + g_return_val_if_fail (uri != NULL, FALSE); if (cookie->secure && !soup_uri_is_https (uri)) return FALSE; diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c index f642b6c7..d9e9e4f3 100644 --- a/libsoup/soup-message.c +++ b/libsoup/soup-message.c @@ -1849,7 +1849,7 @@ soup_message_set_first_party (SoupMessage *msg, GUri *first_party_normalized; g_return_if_fail (SOUP_IS_MESSAGE (msg)); - g_return_if_fail (SOUP_URI_IS_VALID (first_party)); + g_return_if_fail (first_party != NULL); priv = soup_message_get_instance_private (msg); first_party_normalized = soup_uri_copy_with_normalized_flags (first_party); @@ -1912,7 +1912,6 @@ soup_message_set_site_for_cookies (SoupMessage *msg, GUri *site_for_cookies_normalized = NULL; g_return_if_fail (SOUP_IS_MESSAGE (msg)); - g_return_if_fail (site_for_cookies == NULL || SOUP_URI_IS_VALID (site_for_cookies)); priv = soup_message_get_instance_private (msg); if (site_for_cookies) { |