From a7e4724a5eac43fd596b24d5e2e9f53c73510b18 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Sun, 1 Aug 2021 08:55:34 +0100 Subject: [PATCH] http: date: use timegm --- CMakeLists.txt | 1 + cmake/lws_config.h.in | 1 + lib/roles/http/date.c | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 06df8ffdb..4718a438d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -561,6 +561,7 @@ CHECK_FUNCTION_EXISTS(getgrgid_r LWS_HAVE_GETGRGID_R) CHECK_FUNCTION_EXISTS(getgrnam_r LWS_HAVE_GETGRNAM_R) CHECK_FUNCTION_EXISTS(getpwuid_r LWS_HAVE_GETPWUID_R) CHECK_FUNCTION_EXISTS(getpwnam_r LWS_HAVE_GETPWNAM_R) +CHECK_FUNCTION_EXISTS(timegm LWS_HAVE_TIMEGM) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") if(CMAKE_OSX_DEPLOYMENT_TARGET LESS "10.12") diff --git a/cmake/lws_config.h.in b/cmake/lws_config.h.in index 118d1cf7c..b64f29e35 100644 --- a/cmake/lws_config.h.in +++ b/cmake/lws_config.h.in @@ -99,6 +99,7 @@ #cmakedefine LWS_HAVE__STAT32I64 #cmakedefine LWS_HAVE_STDINT_H #cmakedefine LWS_HAVE_SYS_CAPABILITY_H +#cmakedefine LWS_HAVE_TIMEGM #cmakedefine LWS_HAVE_TLS_CLIENT_METHOD #cmakedefine LWS_HAVE_TLSV1_2_CLIENT_METHOD #cmakedefine LWS_HAVE_SUSECONDS_T diff --git a/lib/roles/http/date.c b/lib/roles/http/date.c index 0b0012b6d..6ac42ba9c 100644 --- a/lib/roles/http/date.c +++ b/lib/roles/http/date.c @@ -139,7 +139,16 @@ lws_http_date_parse_unix(const char *b, size_t len, time_t *t) if (lws_http_date_parse(b, len, &tm)) return -1; +#if defined(WIN32) + *t = _mkgmtime(&tm); +#else +#if defined(LWS_HAVE_TIMEGM) + *t = timegm(&tm); +#else + /* this is a poor fallback since it uses localtime zone */ *t = mktime(&tm); +#endif +#endif return (int)*t == -1 ? -1 : 0; }