diff --git a/glib/gdatetime.c b/glib/gdatetime.c index f93d7d88c..a14124d7c 100644 --- a/glib/gdatetime.c +++ b/glib/gdatetime.c @@ -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 (); diff --git a/glib/tests/bookmarks/fail-42.xbel b/glib/tests/bookmarks/fail-42.xbel new file mode 100644 index 000000000..c698d33c8 --- /dev/null +++ b/glib/tests/bookmarks/fail-42.xbel @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/glib/tests/gdatetime.c b/glib/tests/gdatetime.c index c88b411ff..a09ce710b 100644 --- a/glib/tests/gdatetime.c +++ b/glib/tests/gdatetime.c @@ -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