From bbc080210ff99e809253a35e2a050a3ee36d55d2 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee <elv1313@gmail.com> Date: Wed, 19 Apr 2017 21:41:13 -0400 Subject: [PATCH] callmodel: Prevent out of bound access Also adopt an exit early code style to make it more readable. Change-Id: I51333e202244fbf14769507696ffae0c3807cc2b Reviewed-by: Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com> --- src/callmodel.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/callmodel.cpp b/src/callmodel.cpp index 6c511fd2..d4fc5f94 100644 --- a/src/callmodel.cpp +++ b/src/callmodel.cpp @@ -992,12 +992,17 @@ QModelIndex CallModel::parent( const QModelIndex& idx) const ///Get the call index at row,column (active call only) QModelIndex CallModel::index( int row, int column, const QModelIndex& parentIdx) const { - if (row >= 0 && !parentIdx.isValid() && d_ptr->m_lInternalModel.size() > row) { + if (row >= 0 && !parentIdx.isValid() && d_ptr->m_lInternalModel.size() > row) return createIndex(row,column,d_ptr->m_lInternalModel[row]); - } - else if (row >= 0 && parentIdx.isValid() && d_ptr->m_lInternalModel[parentIdx.row()]->m_lChildren.size() > row) { + + if (!parentIdx.isValid()) + return {}; + + if (row < 0 || parentIdx.row() >= d_ptr->m_lInternalModel.size()) + return {}; + + if (d_ptr->m_lInternalModel[parentIdx.row()]->m_lChildren.size() > row) return createIndex(row,column,d_ptr->m_lInternalModel[parentIdx.row()]->m_lChildren[row]); - } return QModelIndex(); } -- GitLab