From 1f76808e4fa5a198f1dbddba6fa18ea1ecb20cb6 Mon Sep 17 00:00:00 2001 From: est31 Date: Sun, 25 Oct 2015 00:01:57 +0200 Subject: [PATCH] Fix out of bounds vector write in Logger::addOutput(ILogOutput *out) 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 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/log.cpp b/src/log.cpp index 7cae8b670..3ffd66673 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -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); }