diff options
-rw-r--r-- | cli/mmcli-output.c | 4 | ||||
-rw-r--r-- | libmm-glib/mm-common-helpers.c | 9 | ||||
-rw-r--r-- | libmm-glib/mm-common-helpers.h | 21 | ||||
-rw-r--r-- | libmm-glib/tests/test-common-helpers.c | 9 |
4 files changed, 29 insertions, 14 deletions
diff --git a/cli/mmcli-output.c b/cli/mmcli-output.c index 1bb17f82..ef1c7cb3 100644 --- a/cli/mmcli-output.c +++ b/cli/mmcli-output.c @@ -621,11 +621,11 @@ mmcli_output_signal_quality (MMModemState state, /* (Custom) Bearer start date output */ void -mmcli_output_start_date (guint64 value) +mmcli_output_start_date (guint64 value) { /* Merge value and recent flag in a single item in human output */ if (selected_type == MMC_OUTPUT_TYPE_HUMAN) { - output_item_new_take_single (MMC_F_BEARER_STATS_START_DATE, mm_new_iso8601_time_from_unix_time (value)); + output_item_new_take_single (MMC_F_BEARER_STATS_START_DATE, mm_new_iso8601_time_from_unix_time (value, NULL)); return; } diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c index 085177b7..0dff0e8c 100644 --- a/libmm-glib/mm-common-helpers.c +++ b/libmm-glib/mm-common-helpers.c @@ -1752,11 +1752,18 @@ date_time_format_iso8601 (GDateTime *dt) } gchar * -mm_new_iso8601_time_from_unix_time (guint64 timestamp) +mm_new_iso8601_time_from_unix_time (guint64 timestamp, + GError **error) { g_autoptr(GDateTime) dt = NULL; dt = g_date_time_new_from_unix_utc ((gint64)timestamp); + if (!dt) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS, + "Invalid unix time: %" G_GUINT64_FORMAT, + timestamp); + 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 490f882d..a92d5b58 100644 --- a/libmm-glib/mm-common-helpers.h +++ b/libmm-glib/mm-common-helpers.h @@ -208,16 +208,17 @@ gboolean mm_get_double_from_match_info (GMatchInfo *match_info, gchar *mm_get_string_unquoted_from_match_info (GMatchInfo *match_info, guint32 match_index); -gchar *mm_new_iso8601_time_from_unix_time (guint64 timestamp); -gchar *mm_new_iso8601_time (guint year, - guint month, - guint day, - guint hour, - guint minute, - guint second, - gboolean have_offset, - gint offset_minutes, - GError **error); +gchar *mm_new_iso8601_time_from_unix_time (guint64 timestamp, + GError **error); +gchar *mm_new_iso8601_time (guint year, + guint month, + guint day, + guint hour, + guint minute, + guint second, + gboolean have_offset, + 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 a1a2e61e..fff37a82 100644 --- a/libmm-glib/tests/test-common-helpers.c +++ b/libmm-glib/tests/test-common-helpers.c @@ -604,7 +604,8 @@ date_time_iso8601 (void) gchar *date = NULL; GError *error = NULL; - date = mm_new_iso8601_time_from_unix_time (1634307342); + date = mm_new_iso8601_time_from_unix_time (1634307342, &error); + g_assert_no_error (error); g_assert_cmpstr (date, ==, "2021-10-15T14:15:42Z"); g_free (date); @@ -636,6 +637,12 @@ date_time_iso8601 (void) g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS); g_assert_null (date); g_clear_error (&error); + + /* Too far into the future */ + date = mm_new_iso8601_time_from_unix_time (G_MAXINT64, &error); + g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS); + g_assert_null (date); + g_clear_error (&error); } /**************************************************************/ |