Repository: thrift
Updated Branches:
  refs/heads/master 2c0badd66 -> 5c3de6d3d


THRIFT-4140: fix unsafe call to gmtime
Client: C++
Patch: Adriaan Schmidt <adriaan.schm...@siemens.com>

This closes #1231


Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/5c3de6d3
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/5c3de6d3
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/5c3de6d3

Branch: refs/heads/master
Commit: 5c3de6d3d28b94650486d8ae337af56c94e9e442
Parents: 2c0badd
Author: James E. King, III <jk...@apache.org>
Authored: Sat Apr 1 10:46:25 2017 -0400
Committer: James E. King, III <jk...@apache.org>
Committed: Sat Apr 1 10:46:25 2017 -0400

----------------------------------------------------------------------
 lib/cpp/src/thrift/transport/THttpServer.cpp | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/thrift/blob/5c3de6d3/lib/cpp/src/thrift/transport/THttpServer.cpp
----------------------------------------------------------------------
diff --git a/lib/cpp/src/thrift/transport/THttpServer.cpp 
b/lib/cpp/src/thrift/transport/THttpServer.cpp
index 3bf3053..ae3a171 100644
--- a/lib/cpp/src/thrift/transport/THttpServer.cpp
+++ b/lib/cpp/src/thrift/transport/THttpServer.cpp
@@ -41,9 +41,11 @@ THttpServer::~THttpServer() {
 }
 
 #if defined(_MSC_VER) || defined(__MINGW32__)
+  #define THRIFT_GMTIME(TM, TIME)             gmtime_s(&TM, &TIME)
   #define THRIFT_strncasecmp(str1, str2, len) _strnicmp(str1, str2, len)
   #define THRIFT_strcasestr(haystack, needle) StrStrIA(haystack, needle)
 #else
+  #define THRIFT_GMTIME(TM, TIME)             gmtime_r(&TIME, &TM)
   #define THRIFT_strncasecmp(str1, str2, len) strncasecmp(str1, str2, len)
   #define THRIFT_strcasestr(haystack, needle) strcasestr(haystack, needle)
 #endif
@@ -146,18 +148,20 @@ std::string THttpServer::getTimeRFC1123() {
   static const char* Months[]
       = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", 
"Nov", "Dec"};
   char buff[128];
+
   time_t t = time(NULL);
-  tm* broken_t = gmtime(&t);
+  struct tm tmb;
+  THRIFT_GMTIME(tmb, t);
 
   sprintf(buff,
           "%s, %d %s %d %d:%d:%d GMT",
-          Days[broken_t->tm_wday],
-          broken_t->tm_mday,
-          Months[broken_t->tm_mon],
-          broken_t->tm_year + 1900,
-          broken_t->tm_hour,
-          broken_t->tm_min,
-          broken_t->tm_sec);
+          Days[tmb.tm_wday],
+          tmb.tm_mday,
+          Months[tmb.tm_mon],
+          tmb.tm_year + 1900,
+          tmb.tm_hour,
+          tmb.tm_min,
+          tmb.tm_sec);
   return std::string(buff);
 }
 }

Reply via email to