aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Logging/Log.cpp
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2013-01-24 16:56:32 +0100
committerSpp <spp@jorge.gr>2013-01-24 16:57:35 +0100
commit53a3373a985e4c266ed0197e9e537d3de1ffab33 (patch)
tree797212831e4799440977f7b6cabe4dabb62dff63 /src/server/shared/Logging/Log.cpp
parentcc605e060509d1255dfb2659200efa3c6f03fdf2 (diff)
Core/Logging: Fix all possible crashes when using bad Appender config settings
Diffstat (limited to 'src/server/shared/Logging/Log.cpp')
-rw-r--r--src/server/shared/Logging/Log.cpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp
index 48512852dc4..f5ef6dfcc5b 100644
--- a/src/server/shared/Logging/Log.cpp
+++ b/src/server/shared/Logging/Log.cpp
@@ -89,8 +89,9 @@ void Log::CreateAppenderFromConfig(const char* name)
options = ConfigMgr::GetStringDefault(options.c_str(), "");
Tokenizer tokens(options, ',');
Tokenizer::const_iterator iter = tokens.begin();
+ uint8 size = tokens.size();
- if (tokens.size() < 2)
+ if (size < 2)
{
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong configuration for appender %s. Config line: %s\n", name, options.c_str());
return;
@@ -98,16 +99,15 @@ void Log::CreateAppenderFromConfig(const char* name)
AppenderFlags flags = APPENDER_FLAGS_NONE;
AppenderType type = AppenderType(atoi(*iter));
- ++iter;
- LogLevel level = LogLevel(atoi(*iter));
+ LogLevel level = LogLevel(atoi(*(++iter)));
if (level > LOG_LEVEL_FATAL)
{
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name);
return;
}
- if (++iter != tokens.end())
- flags = AppenderFlags(atoi(*iter));
+ if (size > 2)
+ flags = AppenderFlags(atoi(*(++iter)));
switch (type)
{
@@ -115,7 +115,7 @@ void Log::CreateAppenderFromConfig(const char* name)
{
AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags);
appenders[appender->getId()] = appender;
- if (++iter != tokens.end())
+ if (iter != tokens.end())
appender->InitColors(*iter);
//fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel()); // DEBUG - RemoveMe
break;
@@ -125,16 +125,16 @@ void Log::CreateAppenderFromConfig(const char* name)
std::string filename;
std::string mode = "a";
- if (++iter == tokens.end())
+ if (size < 4)
{
fprintf(stderr, "Log::CreateAppenderFromConfig: Missing file name for appender %s\n", name);
return;
}
- filename = *iter;
+ filename = *(++iter);
- if (++iter != tokens.end())
- mode = *iter;
+ if (size > 4)
+ mode = *(++iter);
if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
{
@@ -146,11 +146,8 @@ void Log::CreateAppenderFromConfig(const char* name)
}
uint64 maxFileSize = 0;
- if ( (iter != tokens.end()) && (++iter != tokens.end()) )
- {
- char const* c = *iter;
- maxFileSize = atoi(c);
- }
+ if (size > 5)
+ maxFileSize = atoi(*(++iter));
uint8 id = NextAppenderId();
appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize);