From 1dff426bbe4658010a1957e35636e4cc679e26da Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Sun, 31 Jul 2016 05:45:10 +0000 Subject: [PATCH] enable more thread safety and buffer safety --- CMakeLists.txt | 4 ++-- .../sharedLog/src/shared/FileLogObserver.cpp | 2 +- .../library/sharedLog/src/shared/LogManager.cpp | 13 +++++++------ .../sharedLog/src/shared/TailFileLogObserver.cpp | 2 +- .../library/platform/utils/Base/linux/Logger.cpp | 6 +++--- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1137f22e..d59dd7f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,8 +54,8 @@ if(WIN32) elseif(UNIX) find_package(Curses REQUIRED) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG -DDEBUG_LEVEL=2 -DPRODUCTION=0 -m32 -g3 -pipe -O0 -Wall -Wno-overloaded-virtual -Wno-missing-braces -Wno-format -Wno-write-strings -Wno-unknown-pragmas -Wno-uninitialized -Wno-reorder") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DDEBUG_LEVEL=0 -DPRODUCTION=1 -m32 -pipe -O3 -funroll-loops -march=native -mtune=native -Wno-overloaded-virtual -Wno-missing-braces -Wno-format -Wno-write-strings -Wno-unknown-pragmas -Wno-uninitialized -Wno-reorder") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_REENTRANT -D_DEBUG -DDEBUG_LEVEL=2 -DPRODUCTION=0 -m32 -g3 -pipe -O0 -Wall -Wno-overloaded-virtual -Wno-missing-braces -Wno-format -Wno-write-strings -Wno-unknown-pragmas -Wno-uninitialized -Wno-reorder") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_REENTRANT -DDEBUG_LEVEL=0 -DPRODUCTION=1 -m32 -pipe -O3 -funroll-loops -march=native -mtune=native -Wno-overloaded-virtual -Wno-missing-braces -Wno-format -Wno-write-strings -Wno-unknown-pragmas -Wno-uninitialized -Wno-reorder") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -D_GLIBCXX_USE_CXX11_ABI=0") add_definitions(-DLINUX -D_REENTRANT -Dlinux -D_USING_STL -D__STL_NO_BAD_ALLOC -D_GNU_SOURCE -D_XOPEN_SOURCE=500) diff --git a/engine/shared/library/sharedLog/src/shared/FileLogObserver.cpp b/engine/shared/library/sharedLog/src/shared/FileLogObserver.cpp index 9f3f0ae0..702e8fce 100755 --- a/engine/shared/library/sharedLog/src/shared/FileLogObserver.cpp +++ b/engine/shared/library/sharedLog/src/shared/FileLogObserver.cpp @@ -91,7 +91,7 @@ void FileLogObserver::log(LogMessage const &msg) std::string uniAttach(Unicode::wideToNarrow(msg.getUnicodeAttach())); char tsbuf[16]; // yyyymmddhhmmss (14) - IGNORE_RETURN( sprintf(tsbuf, UINT64_FORMAT_SPECIFIER, timestamp) ); + IGNORE_RETURN( snprintf(tsbuf, 16, UINT64_FORMAT_SPECIFIER, timestamp) ); IGNORE_RETURN( m_file->write(14, tsbuf) ); IGNORE_RETURN( m_file->write(1, ":") ); IGNORE_RETURN( m_file->write(static_cast(procId.length()), procId.c_str()) ); diff --git a/engine/shared/library/sharedLog/src/shared/LogManager.cpp b/engine/shared/library/sharedLog/src/shared/LogManager.cpp index 2aaa81d0..15aa5d70 100755 --- a/engine/shared/library/sharedLog/src/shared/LogManager.cpp +++ b/engine/shared/library/sharedLog/src/shared/LogManager.cpp @@ -157,19 +157,20 @@ void LogManager::log(char const *format, ...) if (!s_data) return; // if noone is observing log messages, no need to process them - if (s_data->observers.size() && s_data->logging == 1) + if (s_data->logging == 1 && s_data->observers.size()) { ++s_data->logging; static char text[MaxLogMessageLen]; { va_list ap; va_start(ap, format); //lint !e746 !e1055 - IGNORE_RETURN( _vsnprintf(text, sizeof(text), format, ap) ); - text[sizeof(text)-1] = '\0'; + size_t sizeOfText = sizeof(text); size_t len = strlen(text); + IGNORE_RETURN( _vsnprintf(text, sizeOfText, format, ap) ); + text[sizeOfText-1] = '\0'; // if string was truncated, stick a + on the end - if (len == sizeof(text)-1) - text[len-1] = '+'; + if (len == (sizeOfText-1)) + text[len-1] = '+'; va_end(ap); } @@ -264,7 +265,7 @@ void LogManager::registerObserverType(std::string const &name, LogObserverCreate for (int i = 0; i < 20; ++i) { char const * result = 0; - sprintf(key+9, "%d", i); + snprintf(key+9, 25, "%d", i); int count = 0; do { diff --git a/engine/shared/library/sharedLog/src/shared/TailFileLogObserver.cpp b/engine/shared/library/sharedLog/src/shared/TailFileLogObserver.cpp index 2a8e0dc7..18c7a4f9 100755 --- a/engine/shared/library/sharedLog/src/shared/TailFileLogObserver.cpp +++ b/engine/shared/library/sharedLog/src/shared/TailFileLogObserver.cpp @@ -123,7 +123,7 @@ void TailFileLogObserver::log(LogMessage const &msg) char tsbuf[16]; // yyyymmddhhmmss (14) newLogMessage.clear(); - IGNORE_RETURN( sprintf(tsbuf, UINT64_FORMAT_SPECIFIER, timestamp) ); + IGNORE_RETURN( snprintf(tsbuf, 16, UINT64_FORMAT_SPECIFIER, timestamp) ); newLogMessage.append(tsbuf); newLogMessage.append(":"); newLogMessage.append(procId); diff --git a/external/3rd/library/platform/utils/Base/linux/Logger.cpp b/external/3rd/library/platform/utils/Base/linux/Logger.cpp index 1510e1c1..d30418ff 100755 --- a/external/3rd/library/platform/utils/Base/linux/Logger.cpp +++ b/external/3rd/library/platform/utils/Base/linux/Logger.cpp @@ -37,11 +37,11 @@ Logger::Logger(const char *prefix, int level, unsigned size, bool rollDate) memcpy(&m_lastDateTime, &now, sizeof(tm)); if(m_rollDate) { - sprintf(buf, "%s%c%2.2d-%2.2d-%2.2d", m_dirPrefix.c_str(), file_sep, (now.tm_mon + 1), now.tm_mday, (now.tm_year % 100)); + snprintf(buf, 1024, "%s%c%2.2d-%2.2d-%2.2d", m_dirPrefix.c_str(), file_sep, (now.tm_mon + 1), now.tm_mday, (now.tm_year % 100)); } else { - sprintf(buf, "%s", m_dirPrefix.c_str()); + snprintf(buf, 1024, "%s", m_dirPrefix.c_str()); } logDir = fopen(buf, "r+"); if(errno == ENOENT) @@ -309,7 +309,7 @@ void Logger::rollDate(time_t t) tm now; localtime_r(&t, &now); - sprintf(buf, "%s%c%2.2d-%2.2d-%2.2d", m_dirPrefix.c_str(), file_sep, (now.tm_mon + 1), now.tm_mday, (now.tm_year % 100)); + snprintf(buf, 80, "%s%c%2.2d-%2.2d-%2.2d", m_dirPrefix.c_str(), file_sep, (now.tm_mon + 1), now.tm_mday, (now.tm_year % 100)); logDir = fopen(buf, "r+"); if(errno == ENOENT)