From 571911730a0b6dbff4e874fb47426cdb074d2351 Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Fri, 11 Jun 2021 12:37:08 -0400 Subject: [PATCH] Use Chromium code for cookie date validity check (fixes issue #2927) --- libcef/common/time_impl.cc | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/libcef/common/time_impl.cc b/libcef/common/time_impl.cc index 67f31635c..4d57788bf 100644 --- a/libcef/common/time_impl.cc +++ b/libcef/common/time_impl.cc @@ -6,6 +6,23 @@ #include "base/macros.h" +#if defined(OS_WIN) +#include + +namespace { + +// From MSDN, FILETIME "Contains a 64-bit value representing the number of +// 100-nanosecond intervals since January 1, 1601 (UTC)." This value must +// be less than 0x8000000000000000. Otherwise, the function +// FileTimeToSystemTime fails. +// From base/time/time_win.cc: +bool CanConvertToFileTime(int64_t us) { + return us >= 0 && us <= (std::numeric_limits::max() / 10); +} + +} // namespace +#endif // defined(OS_WIN) + void cef_time_to_basetime(const cef_time_t& cef_time, base::Time& time) { base::Time::Exploded exploded; exploded.year = cef_time.year; @@ -22,11 +39,7 @@ void cef_time_to_basetime(const cef_time_t& cef_time, base::Time& time) { void cef_time_from_basetime(const base::Time& time, cef_time_t& cef_time) { #if defined(OS_WIN) int64_t t = time.ToDeltaSinceWindowsEpoch().InMicroseconds(); - // From MSDN, FILETIME "Contains a 64-bit value representing the number of - // 100-nanosecond intervals since January 1, 1601 (UTC)." This value must - // be less than 0x8000000000000000. Otherwise, the function - // FileTimeToSystemTime fails. - if (t < 0 || static_cast(t * 10) >= 0x8000000000000000) + if (!CanConvertToFileTime(t)) return; #endif