diff options
author | Carlo Lobrano <c.lobrano@gmail.com> | 2022-04-08 11:46:11 +0200 |
---|---|---|
committer | Carlo Lobrano <c.lobrano@gmail.com> | 2022-04-08 15:41:49 +0200 |
commit | ac243f94676695d88e861d225e98ec5bb3c2861e (patch) | |
tree | 339f80e309a17e17e707d0716f2bf4e070fae2c1 /libmm-glib/mm-common-helpers.c | |
parent | 5c8c1136bd3bad2b542a0b3dc334dbd0686ba10d (diff) |
sms: prevent crash if date is out of range
g_date_time_new, and g_date_time_new_utc return NULL if inputs are out
of range, and currently mm_new_iso8601_time passes the GDateTime created
by those two functions to date_time_format_iso8601 without checking for
NULL values, causing a g_date_time_format_iso8601 crash if PDU data is
corrupted with wrong date.
To prevent this, mm_new_iso8601_time now can return NULL and set a new
GError if GDateTime created by g_date_time_new is NULL.
Fixes #546
Diffstat (limited to 'libmm-glib/mm-common-helpers.c')
-rw-r--r-- | libmm-glib/mm-common-helpers.c | 11 |
1 files changed, 10 insertions, 1 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); } |