Fix out of bounds vector write in Logger::addOutput(ILogOutput *out)
authorest31 <MTest31@outlook.com>
Sat, 24 Oct 2015 22:01:57 +0000 (00:01 +0200)
committerest31 <MTest31@outlook.com>
Sat, 24 Oct 2015 22:13:01 +0000 (00:13 +0200)
Previously, the invocation of Logger::addOutput(ILogOutput *out) led to
an out of bounds write of the m_outputs vector, resulting in the
m_silenced_levels array being modified.

Fortunately, the only caller of that method was android system logging,
and only since a few commits ago.

src/log.cpp

index 7cae8b67072a18c119a09e6b2d6fc94ff89d6989..3ffd66673413a367e5acbbb1f86a2d0bbb0f7184 100644 (file)
@@ -172,7 +172,7 @@ LogLevel Logger::stringToLevel(const std::string &name)
 
 void Logger::addOutput(ILogOutput *out)
 {
-       addOutputMaxLevel(out, LL_MAX);
+       addOutputMaxLevel(out, (LogLevel)(LL_MAX - 1));
 }
 
 void Logger::addOutput(ILogOutput *out, LogLevel lev)
@@ -182,6 +182,7 @@ void Logger::addOutput(ILogOutput *out, LogLevel lev)
 
 void Logger::addOutputMaxLevel(ILogOutput *out, LogLevel lev)
 {
+       assert(lev < LL_MAX);
        for (size_t i = 0; i <= lev; i++)
                m_outputs[i].push_back(out);
 }