mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-04 10:16:17 +01:00
GDateTime: Reject days outside of month limits
The previous code allowed February 30th.
This commit is contained in:
parent
f6ee658974
commit
947fea1d16
@ -963,7 +963,7 @@ g_date_time_new (GTimeZone *tz,
|
|||||||
|
|
||||||
if (year < 1 || year > 9999 ||
|
if (year < 1 || year > 9999 ||
|
||||||
month < 1 || month > 12 ||
|
month < 1 || month > 12 ||
|
||||||
day < 1 || day > 31 ||
|
day < 1 || day > days_in_months[GREGORIAN_LEAP (year)][month] ||
|
||||||
hour < 0 || hour > 23 ||
|
hour < 0 || hour > 23 ||
|
||||||
minute < 0 || minute > 59 ||
|
minute < 0 || minute > 59 ||
|
||||||
seconds < 0.0 || seconds >= 60.0)
|
seconds < 0.0 || seconds >= 60.0)
|
||||||
|
@ -745,6 +745,73 @@ test_GDateTime_new_full (void)
|
|||||||
#endif
|
#endif
|
||||||
g_assert (!g_date_time_is_daylight_savings (dt));
|
g_assert (!g_date_time_is_daylight_savings (dt));
|
||||||
g_date_time_unref (dt);
|
g_date_time_unref (dt);
|
||||||
|
|
||||||
|
/* Check month limits */
|
||||||
|
dt = g_date_time_new_utc (2016, 1, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 1, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 1, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 2, 29, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 2, 29);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 2, 30, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2017, 2, 28, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2017, 2, 28);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2017, 2, 29, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 3, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 3, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 3, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 4, 30, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 4, 30);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 4, 31, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 5, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 5, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 5, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 6, 30, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 6, 30);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 6, 31, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 7, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 7, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 7, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 8, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 8, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 8, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 9, 30, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 9, 30);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 9, 31, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 10, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 10, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 10, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 11, 30, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 11, 30);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 11, 31, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 12, 31, 22, 10, 42);
|
||||||
|
ASSERT_DATE (dt, 2016, 12, 31);
|
||||||
|
g_date_time_unref (dt);
|
||||||
|
dt = g_date_time_new_utc (2016, 12, 32, 22, 10, 42);
|
||||||
|
g_assert_null (dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user