From 660b3086172c653fa65b1e2bddd3ce99863f30d9 Mon Sep 17 00:00:00 2001 From: Laslo Hunhold Date: Thu, 23 Jul 2020 16:48:34 +0200 Subject: [PATCH] Use timegm() instead of mktime() to generate UNIX-timestamp The broken down time-representation tm generated earlier is in UTC, and mktime() assumes that it's in local time instead, leading to the problem that quark might not send a NOT_MODIFIED in a different timezone. timegm() instead correctly interprets the broken down time-representation tm as UTC and returns the proper timestamp. It might not be portable like mktime(), but it's complicated to emulate it otherwise. Thanks to Jeremy Bobbin for reporting the bug and providing this fix, which is why I've added him to the LICENSE. Thanks also to Hiltjo for his input. Signed-off-by: Laslo Hunhold --- LICENSE | 1 + http.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 5863035..8af9075 100644 --- a/LICENSE +++ b/LICENSE @@ -12,6 +12,7 @@ Copyright 2018 Dominik Schmidt Copyright 2018 Aaron Burrow Copyright 2020 Nihal Jere Copyright 2020 Rainer Holzner +Copyright 2020 Jeremy Bobbin Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above diff --git a/http.c b/http.c index 249c168..8cf0ee4 100644 --- a/http.c +++ b/http.c @@ -531,7 +531,7 @@ http_send_response(int fd, struct request *r) } /* compare with last modification date of the file */ - if (difftime(st.st_mtim.tv_sec, mktime(&tm)) <= 0) { + if (difftime(st.st_mtim.tv_sec, timegm(&tm)) <= 0) { if (dprintf(fd, "HTTP/1.1 %d %s\r\n" "Date: %s\r\n"