From 029174b069ccd7aeb2456fc97d2f6b6bf6a64108 Mon Sep 17 00:00:00 2001 From: Andrej Kacian Date: Mon, 20 Mar 2017 19:52:11 +0100 Subject: [PATCH] Fix crash on e-mails with invalid date on Windows. This fixes crashing on dates with out of range numbers, e.g. "Sun, 19 Mar 2017 27:41:31 +0600". --- src/procheader.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/procheader.c b/src/procheader.c index efa3a7f67..ea20c93bf 100644 --- a/src/procheader.c +++ b/src/procheader.c @@ -1057,15 +1057,23 @@ time_t procheader_date_parse(gchar *dest, const gchar *src, gint len) #ifdef G_OS_WIN32 GTimeZone *tz; - GDateTime *dt; + GDateTime *dt, *dt2; + /* First create a valid GDateTime in UTC. */ + tz = g_time_zone_new_utc(); + dt = g_date_time_new(tz, 1, 1, 1, 0, 0, 0); + g_time_zone_unref(tz); + dt2 = g_date_time_add_full(dt, year-1, dmonth-1, day-1, hh, mm, ss); + g_date_time_unref(dt); + + /* Now we shift it to the desired time zone. */ tz = g_time_zone_new(zone); - dt = g_date_time_new(tz, year, dmonth, day, hh, mm, ss); + dt = g_date_time_to_timezone(dt2, tz); + g_date_time_unref(dt2); + g_time_zone_unref(tz); timer = g_date_time_to_unix(dt); - g_date_time_unref(dt); - g_time_zone_unref(tz); #else struct tm t; -- 2.25.1