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