commit 660b3086172c653fa65b1e2bddd3ce99863f30d9
Author:     Laslo Hunhold <[email protected]>
AuthorDate: Thu Jul 23 16:48:34 2020 +0200
Commit:     Laslo Hunhold <[email protected]>
CommitDate: Thu Jul 23 16:48:34 2020 +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 <[email protected]> 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 <[email protected]>

diff --git a/LICENSE b/LICENSE
index 5863035..8af9075 100644
--- a/LICENSE
+++ b/LICENSE
@@ -12,6 +12,7 @@ Copyright 2018 Dominik Schmidt <[email protected]>
 Copyright 2018 Aaron Burrow <[email protected]>
 Copyright 2020 Nihal Jere <[email protected]>
 Copyright 2020 Rainer Holzner <[email protected]>
+Copyright 2020 Jeremy Bobbin <[email protected]>
 
 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"

Reply via email to