mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-22 18:15:31 +01:00
Core/Logging: Fix all possible crashes when using bad Appender config settings
This commit is contained in:
@@ -89,8 +89,9 @@ void Log::CreateAppenderFromConfig(const char* name)
|
|||||||
options = ConfigMgr::GetStringDefault(options.c_str(), "");
|
options = ConfigMgr::GetStringDefault(options.c_str(), "");
|
||||||
Tokenizer tokens(options, ',');
|
Tokenizer tokens(options, ',');
|
||||||
Tokenizer::const_iterator iter = tokens.begin();
|
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());
|
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong configuration for appender %s. Config line: %s\n", name, options.c_str());
|
||||||
return;
|
return;
|
||||||
@@ -98,16 +99,15 @@ void Log::CreateAppenderFromConfig(const char* name)
|
|||||||
|
|
||||||
AppenderFlags flags = APPENDER_FLAGS_NONE;
|
AppenderFlags flags = APPENDER_FLAGS_NONE;
|
||||||
AppenderType type = AppenderType(atoi(*iter));
|
AppenderType type = AppenderType(atoi(*iter));
|
||||||
++iter;
|
LogLevel level = LogLevel(atoi(*(++iter)));
|
||||||
LogLevel level = LogLevel(atoi(*iter));
|
|
||||||
if (level > LOG_LEVEL_FATAL)
|
if (level > LOG_LEVEL_FATAL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name);
|
fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++iter != tokens.end())
|
if (size > 2)
|
||||||
flags = AppenderFlags(atoi(*iter));
|
flags = AppenderFlags(atoi(*(++iter)));
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
@@ -115,7 +115,7 @@ void Log::CreateAppenderFromConfig(const char* name)
|
|||||||
{
|
{
|
||||||
AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags);
|
AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags);
|
||||||
appenders[appender->getId()] = appender;
|
appenders[appender->getId()] = appender;
|
||||||
if (++iter != tokens.end())
|
if (iter != tokens.end())
|
||||||
appender->InitColors(*iter);
|
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
|
//fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel()); // DEBUG - RemoveMe
|
||||||
break;
|
break;
|
||||||
@@ -125,16 +125,16 @@ void Log::CreateAppenderFromConfig(const char* name)
|
|||||||
std::string filename;
|
std::string filename;
|
||||||
std::string mode = "a";
|
std::string mode = "a";
|
||||||
|
|
||||||
if (++iter == tokens.end())
|
if (size < 4)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Log::CreateAppenderFromConfig: Missing file name for appender %s\n", name);
|
fprintf(stderr, "Log::CreateAppenderFromConfig: Missing file name for appender %s\n", name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = *iter;
|
filename = *(++iter);
|
||||||
|
|
||||||
if (++iter != tokens.end())
|
if (size > 4)
|
||||||
mode = *iter;
|
mode = *(++iter);
|
||||||
|
|
||||||
if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
|
if (flags & APPENDER_FLAGS_USE_TIMESTAMP)
|
||||||
{
|
{
|
||||||
@@ -146,11 +146,8 @@ void Log::CreateAppenderFromConfig(const char* name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint64 maxFileSize = 0;
|
uint64 maxFileSize = 0;
|
||||||
if ( (iter != tokens.end()) && (++iter != tokens.end()) )
|
if (size > 5)
|
||||||
{
|
maxFileSize = atoi(*(++iter));
|
||||||
char const* c = *iter;
|
|
||||||
maxFileSize = atoi(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8 id = NextAppenderId();
|
uint8 id = NextAppenderId();
|
||||||
appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize);
|
appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize);
|
||||||
|
|||||||
Reference in New Issue
Block a user