From 0e77bf296648c5db92c269c678d27f6846de4e9f Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 12 Apr 2018 10:51:51 +0200 Subject: [PATCH] options: treat time strings as UTC times When parsing user supplied time strings, calculate an UTC time instant by substracting the current zone offset from the result of mktime(3), then use gmtime_r(3) to turn the time_t value back into a sanitized time structure. This ensures that user supplied dates are not interpreted as local time. Fixes FS#1483. Signed-off-by: Jo-Philipp Wich --- options.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/options.c b/options.c index b5d5c02..087aa63 100644 --- a/options.c +++ b/options.c @@ -641,6 +641,7 @@ fw3_parse_date(void *ptr, const char *val, bool is_list) { unsigned int year = 1970, mon = 1, day = 1, hour = 0, min = 0, sec = 0; struct tm tm = { 0 }; + time_t ts; char *p; year = strtoul(val, &p, 10); @@ -685,9 +686,11 @@ ret: tm.tm_min = min; tm.tm_sec = sec; - if (mktime(&tm) >= 0) + ts = mktime(&tm) - timezone; + + if (ts >= 0) { - *((struct tm *)ptr) = tm; + gmtime_r(&ts, (struct tm *)ptr); return true; } -- 2.25.1