From cdc192fba820b712ffd5b97f65c1926306eaffd7 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Thu, 24 Mar 2016 23:49:19 +0100 Subject: [PATCH] Prevent off-by-one data access in chart models. --- gui/chartmodel.cpp | 1 + gui/parser.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gui/chartmodel.cpp b/gui/chartmodel.cpp index 85092e6..b914b38 100644 --- a/gui/chartmodel.cpp +++ b/gui/chartmodel.cpp @@ -159,6 +159,7 @@ int ChartModel::rowCount(const QModelIndex& parent) const void ChartModel::resetData(const ChartData& data) { + Q_ASSERT(m_data.labels.size() < ChartRows::MAX_NUM_COST); beginResetModel(); m_data = data; endResetModel(); diff --git a/gui/parser.cpp b/gui/parser.cpp index a1c74e4..cc1d4b8 100644 --- a/gui/parser.cpp +++ b/gui/parser.cpp @@ -168,7 +168,7 @@ struct ParserData final : public AccumulatedTraceData sort(merged.begin(), merged.end(), [=] (const ChartMergeData& left, const ChartMergeData& right) { return left.*member > right.*member; }); - for (size_t i = 0; i < min(size_t(ChartRows::MAX_NUM_COST), merged.size()); ++i) { + for (size_t i = 0; i < min(size_t(ChartRows::MAX_NUM_COST - 1), merged.size()); ++i) { const auto& alloc = merged[i]; if (!(alloc.*member)) { break; -- 2.7.4