commit 029174b069ccd7aeb2456fc97d2f6b6bf6a64108
parent 9fb2bb2b594d74ba82ff2c1c59c4a90283e29e23
Author: Andrej Kacian <ticho@claws-mail.org>
Date: Mon, 20 Mar 2017 19:52:11 +0100
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".
Diffstat:
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git 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;