diff --git a/glib/gtimer.c b/glib/gtimer.c index a51b359ca..38262ff9e 100644 --- a/glib/gtimer.c +++ b/glib/gtimer.c @@ -491,7 +491,14 @@ g_time_val_from_iso8601 (const gchar *iso_date, * Use g_date_time_format() or g_strdup_printf() if a different * variation of ISO 8601 format is required. * - * Returns: a newly allocated string containing an ISO 8601 date + * If @time_ represents a date which is too large to fit into a `struct tm`, + * %NULL will be returned. This is platform dependent, but it is safe to assume + * years up to 3000 are supported. The return value of g_time_val_to_iso8601() + * has been nullable since GLib 2.54; before then, GLib would crash under the + * same conditions. + * + * Returns: (nullable): a newly allocated string containing an ISO 8601 date, + * or %NULL if @time_ was too large * * Since: 2.12 */ @@ -518,6 +525,10 @@ g_time_val_to_iso8601 (GTimeVal *time_) #endif #endif + /* If the gmtime() call has failed, time_->tv_sec is too big. */ + if (tm == NULL) + return NULL; + if (time_->tv_usec != 0) { /* ISO 8601 date and time format, with fractionary seconds: