Title: [277022] releases/WebKitGTK/webkit-2.32
Revision
277022
Author
[email protected]
Date
2021-05-05 09:18:36 -0700 (Wed, 05 May 2021)

Log Message

Merge r277014 - [SOUP] Wrong cookie timestamp in case of long expire time
https://bugs.webkit.org/show_bug.cgi?id=225389

Reviewed by Adrian Perez de Castro.

Source/WebCore:

There's an overflow when converting the dates in both libsoup2 and libsoup3, but for two different reasons. In
the case of libsoup2 we are using an int for the conversion of milliseconds to seconds which is not enough. In
the case of libsoup3 we are passing the value in milliseconds to g_date_time_new_from_unix_utc() that expects
seconds.

* platform/network/soup/CookieSoup.cpp:
(WebCore::msToSoupDate): Use int64_t instead of int for the cast.
(WebCore::Cookie::toSoupCookie const): Convert the value to seconds.

Tools:

Add a test case.

* TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
(testCookieManagerLongExpires):
(beforeAll):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog (277021 => 277022)


--- releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog	2021-05-05 16:18:28 UTC (rev 277021)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog	2021-05-05 16:18:36 UTC (rev 277022)
@@ -1,3 +1,19 @@
+2021-05-05  Carlos Garcia Campos  <[email protected]>
+
+        [SOUP] Wrong cookie timestamp in case of long expire time
+        https://bugs.webkit.org/show_bug.cgi?id=225389
+
+        Reviewed by Adrian Perez de Castro.
+
+        There's an overflow when converting the dates in both libsoup2 and libsoup3, but for two different reasons. In
+        the case of libsoup2 we are using an int for the conversion of milliseconds to seconds which is not enough. In
+        the case of libsoup3 we are passing the value in milliseconds to g_date_time_new_from_unix_utc() that expects
+        seconds.
+
+        * platform/network/soup/CookieSoup.cpp:
+        (WebCore::msToSoupDate): Use int64_t instead of int for the cast.
+        (WebCore::Cookie::toSoupCookie const): Convert the value to seconds.
+
 2021-04-22  Carlos Garcia Campos  <[email protected]>
 
         [GTK][WPE] Bump libsoup3 version to 2.99.4

Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/network/soup/CookieSoup.cpp (277021 => 277022)


--- releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/network/soup/CookieSoup.cpp	2021-05-05 16:18:28 UTC (rev 277021)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/platform/network/soup/CookieSoup.cpp	2021-05-05 16:18:36 UTC (rev 277022)
@@ -93,7 +93,7 @@
 
     // monthFromDayInYear() returns a value in the [0,11] range, while soup_date_new() expects
     // a value in the [1,12] range, meaning we have to manually adjust the month value.
-    return soup_date_new(year, monthFromDayInYear(dayOfYear, leapYear) + 1, dayInMonthFromDayInYear(dayOfYear, leapYear), msToHours(ms), msToMinutes(ms), static_cast<int>(ms / 1000) % 60);
+    return soup_date_new(year, monthFromDayInYear(dayOfYear, leapYear) + 1, dayInMonthFromDayInYear(dayOfYear, leapYear), msToHours(ms), msToMinutes(ms), static_cast<int64_t>(ms / 1000) % 60);
 }
 #endif
 
@@ -117,7 +117,7 @@
         soup_cookie_set_expires(soupCookie, date);
         soup_date_free(date);
 #else
-        GRefPtr<GDateTime> date = adoptGRef(g_date_time_new_from_unix_utc(*expires));
+        GRefPtr<GDateTime> date = adoptGRef(g_date_time_new_from_unix_utc(*expires / 1000.));
         soup_cookie_set_expires(soupCookie, date.get());
 #endif
     }

Modified: releases/WebKitGTK/webkit-2.32/Tools/ChangeLog (277021 => 277022)


--- releases/WebKitGTK/webkit-2.32/Tools/ChangeLog	2021-05-05 16:18:28 UTC (rev 277021)
+++ releases/WebKitGTK/webkit-2.32/Tools/ChangeLog	2021-05-05 16:18:36 UTC (rev 277022)
@@ -1,3 +1,16 @@
+2021-05-05  Carlos Garcia Campos  <[email protected]>
+
+        [SOUP] Wrong cookie timestamp in case of long expire time
+        https://bugs.webkit.org/show_bug.cgi?id=225389
+
+        Reviewed by Adrian Perez de Castro.
+
+        Add a test case.
+
+        * TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp:
+        (testCookieManagerLongExpires):
+        (beforeAll):
+
 2021-04-20  Marco Felsch  <[email protected]>
 
         [WPE][Qt] Fix build failure after r270690

Modified: releases/WebKitGTK/webkit-2.32/Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp (277021 => 277022)


--- releases/WebKitGTK/webkit-2.32/Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp	2021-05-05 16:18:28 UTC (rev 277021)
+++ releases/WebKitGTK/webkit-2.32/Tools/TestWebKitAPI/Tests/WebKitGLib/TestCookieManager.cpp	2021-05-05 16:18:36 UTC (rev 277022)
@@ -706,7 +706,34 @@
     g_main_loop_run(test->m_mainLoop);
 }
 
+static void testCookieManagerLongExpires(CookieManagerTest* test, gconstpointer)
+{
+    g_unlink(test->m_cookiesTextFile.get());
+    g_unlink(test->m_cookiesSQLiteFile.get());
+
+    GRefPtr<GDateTime> now = adoptGRef(g_date_time_new_now_utc());
+    GRefPtr<GDateTime> expires = adoptGRef(g_date_time_add_years(now.get(), 35));
+    GUniquePtr<char> line(g_strdup_printf("#HttpOnly_localhost\tFALSE\t/\tFALSE\t%ld\tprov\t123\tNone", g_date_time_to_unix(expires.get())));
+    test->m_cookiesTextFile.reset(g_build_filename(Test::dataDirectory(), "cookies.txt", nullptr));
+    g_file_set_contents(test->m_cookiesTextFile.get(), line.get(), -1, nullptr);
+    test->setPersistentStorage(WEBKIT_COOKIE_PERSISTENT_STORAGE_TEXT);
+
+    GList* cookies = test->getCookies("http://localhost/");
+    g_assert_cmpint(g_list_length(cookies), ==, 1);
+    SoupCookie* cookie = static_cast<SoupCookie*>(cookies->data);
+    auto* cookiesExpires = soup_cookie_get_expires(cookie);
+    g_assert_nonnull(cookiesExpires);
 #if USE(SOUP2)
+    g_assert_cmpint(g_date_time_to_unix(expires.get()), ==, soup_date_to_time_t(cookiesExpires));
+#else
+    g_assert_cmpint(g_date_time_to_unix(expires.get()), ==, g_date_time_to_unix(cookiesExpires));
+#endif
+
+    test->deleteAllCookies();
+    g_assert_cmpint(g_strv_length(test->getDomains()), ==, 0);
+}
+
+#if USE(SOUP2)
 static void serverCallback(SoupServer* server, SoupMessage* message, const char* path, GHashTable*, SoupClientContext*, gpointer)
 #else
 static void serverCallback(SoupServer* server, SoupServerMessage* message, const char* path, GHashTable*, gpointer)
@@ -748,6 +775,7 @@
     CookiePersistentStorageTest::add("WebKitCookieManager", "persistent-storage", testCookieManagerPersistentStorage);
     CookieManagerTest::add("WebKitCookieManager", "persistent-storage-delete-all", testCookieManagerPersistentStorageDeleteAll);
     CookieManagerTest::add("WebKitCookieManager", "ephemeral", testCookieManagerEphemeral);
+    CookieManagerTest::add("WebKitCookieManager", "long-expires", testCookieManagerLongExpires);
 }
 
 void afterAll()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to