enable more thread safety and buffer safety

This commit is contained in:
DarthArgus
2016-07-31 05:45:10 +00:00
parent ed4a4d54ee
commit 1dff426bbe
5 changed files with 14 additions and 13 deletions
@@ -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<int>(procId.length()), procId.c_str()) );
@@ -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
{
@@ -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);