- 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()