Use timegm() instead of mktime() to generate UNIX-timestamp - quark - quark web server
git clone git://git.suckless.org/quark
Log
Files
Refs
LICENSE
---
commit 660b3086172c653fa65b1e2bddd3ce99863f30d9
parent a55df3915dad471ee0629262e950aefc43b8dbad
Author: Laslo Hunhold 
Date:   Thu, 23 Jul 2020 16:48:34 +0200

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 

Diffstat:
  M LICENSE                             |       1 +
  M http.c                              |       2 +-

2 files changed, 2 insertions(+), 1 deletion(-)
---
diff --git 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
@@ -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"