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); } }