diff options
Diffstat (limited to 'libmm-glib')
-rw-r--r-- | libmm-glib/mm-common-helpers.c | 11 | ||||
-rw-r--r-- | libmm-glib/mm-common-helpers.h | 3 | ||||
-rw-r--r-- | libmm-glib/tests/test-common-helpers.c | 26 |
3 files changed, 36 insertions, 4 deletions
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c index b7883b26..085177b7 100644 --- a/libmm-glib/mm-common-helpers.c +++ b/libmm-glib/mm-common-helpers.c @@ -1769,7 +1769,8 @@ mm_new_iso8601_time (guint year, guint minute, guint second, gboolean have_offset, - gint offset_minutes) + gint offset_minutes, + GError **error) { g_autoptr(GDateTime) dt = NULL; @@ -1781,6 +1782,14 @@ mm_new_iso8601_time (guint year, } else dt = g_date_time_new_utc (year, month, day, hour, minute, second); + if (dt == NULL) { + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_INVALID_ARGS, + "Invalid input for date: got year:%u, month:%u, day:%u, hour:%u, minute:%u, second:%u", + year, month, day, hour, minute, second); + return NULL; + } return date_time_format_iso8601 (dt); } diff --git a/libmm-glib/mm-common-helpers.h b/libmm-glib/mm-common-helpers.h index d444012c..490f882d 100644 --- a/libmm-glib/mm-common-helpers.h +++ b/libmm-glib/mm-common-helpers.h @@ -216,7 +216,8 @@ gchar *mm_new_iso8601_time (guint year, guint minute, guint second, gboolean have_offset, - gint offset_minutes); + gint offset_minutes, + GError **error); /******************************************************************************/ /* Type checkers and conversion utilities */ diff --git a/libmm-glib/tests/test-common-helpers.c b/libmm-glib/tests/test-common-helpers.c index 69b95cb1..a1a2e61e 100644 --- a/libmm-glib/tests/test-common-helpers.c +++ b/libmm-glib/tests/test-common-helpers.c @@ -602,18 +602,40 @@ static void date_time_iso8601 (void) { gchar *date = NULL; + GError *error = NULL; date = mm_new_iso8601_time_from_unix_time (1634307342); g_assert_cmpstr (date, ==, "2021-10-15T14:15:42Z"); g_free (date); - date = mm_new_iso8601_time (2021, 10, 15, 16, 15, 42, FALSE, 0); + date = mm_new_iso8601_time (2021, 10, 15, 16, 15, 42, FALSE, 0, &error); + g_assert_no_error (error); g_assert_cmpstr (date, ==, "2021-10-15T16:15:42Z"); g_free (date); - date = mm_new_iso8601_time (2021, 10, 15, 16, 15, 42, TRUE, 120); + date = mm_new_iso8601_time (2021, 10, 15, 16, 15, 42, TRUE, 120, &error); + g_assert_no_error (error); g_assert_cmpstr (date, ==, "2021-10-15T16:15:42+02"); g_free (date); + + /* Valid args: + * - Year:[1-9999] + * - Month:[1-12] + * - Day:[1-28|29|30|31] according to year and month + * - Hour: [0-23] + * - Minute: [0-59] + * - Seconds: [0.0-60.0) + * */ + date = mm_new_iso8601_time (2021, 13, 15, 16, 15, 42, TRUE, 120, &error); + g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS); + g_assert_null (date); + g_clear_error (&error); + + /* No February 29 in 2021 */ + date = mm_new_iso8601_time (2021, 2, 29, 16, 15, 42, TRUE, 120, &error); + g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS); + g_assert_null (date); + g_clear_error (&error); } /**************************************************************/ |