Merge branch 'backport-1671-datetime-negative-overflow-glib-2-64' into 'glib-2-64'

Backport !1671 “ gdatetime: Avoid integer overflow creating dates too far in the past” to glib-2-64

See merge request GNOME/glib!1672
This commit is contained in:
Sebastian Dröge 2020-10-01 11:44:05 +00:00
commit 1a3c7c5982
3 changed files with 12 additions and 3 deletions

View File

@ -1032,7 +1032,8 @@ g_date_time_new_from_unix_local (gint64 t)
GDateTime *datetime;
GTimeZone *local;
if (t > G_MAXINT64 / USEC_PER_SECOND)
if (t > G_MAXINT64 / USEC_PER_SECOND ||
t < G_MININT64 / USEC_PER_SECOND)
return NULL;
local = g_time_zone_new_local ();
@ -1067,7 +1068,8 @@ g_date_time_new_from_unix_utc (gint64 t)
GDateTime *datetime;
GTimeZone *utc;
if (t > G_MAXINT64 / USEC_PER_SECOND)
if (t > G_MAXINT64 / USEC_PER_SECOND ||
t < G_MININT64 / USEC_PER_SECOND)
return NULL;
utc = g_time_zone_new_utc ();

View File

@ -0,0 +1 @@
<xbel version="1.0"><bookmark href=""><info><metadata owner="http://freedesktop.org"><applications><application name=""exec=""timestamp="-77873021800189">

View File

@ -152,7 +152,7 @@ test_GDateTime_new_from_unix (void)
g_date_time_unref (dt);
}
/* Check that trying to create a #GDateTime too far in the future reliably
/* Check that trying to create a #GDateTime too far in the future (or past) reliably
* fails. Previously, the checks for this overflowed and it silently returned
* an incorrect #GDateTime. */
static void
@ -167,6 +167,12 @@ test_GDateTime_new_from_unix_overflow (void)
dt = g_date_time_new_from_unix_local (G_MAXINT64);
g_assert_null (dt);
dt = g_date_time_new_from_unix_utc (G_MININT64);
g_assert_null (dt);
dt = g_date_time_new_from_unix_local (G_MININT64);
g_assert_null (dt);
}
static void