diff options
author | Lubomir I. Ivanov <neolit123@gmail.com> | 2017-10-03 23:16:15 +0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-10-03 15:43:03 -0700 |
commit | e3118d915cf49de4cc722522031b0be44014d790 (patch) | |
tree | b811197cc821adcd676eec408ba3ff6d296f54ad /desktop-widgets/divelistview.cpp | |
parent | 53c1c3f26bec6bf1d9f5417d5db12ea532c6a5cc (diff) | |
download | subsurface-e3118d915cf49de4cc722522031b0be44014d790.tar.gz |
divelist: prevent a crash for missing column width
The `static int defaultWidth[]` definition in divelistview.cpp
could potentially end up missing an element which can later result
in out-of-bounds access when iterating through the list of
columns and updating their widths.
Add a couple of methods in DiveTripModel for setting and getting
the widths and use those. The default values are now pre-set in a
QVector in the DiveTripModel() constructor.
Throw warnings if out-of-bounds columns are requested.
Reported-by: Gaetan Bisson <bisson@archlinux.org>
Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'desktop-widgets/divelistview.cpp')
-rw-r--r-- | desktop-widgets/divelistview.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index a92afadbd..0b6386efd 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -25,9 +25,6 @@ #include "core/metrics.h" #include "core/helpers.h" -// # Date Rtg Dpth Dur Tmp Wght Suit Cyl Gas SAC OTU CNS Px Loc -static int defaultWidth[] = { 70, 140, 90, 50, 50, 50, 50, 70, 50, 50, 70, 50, 50, 5, 500}; - DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), sortColumn(0), currentOrder(Qt::DescendingOrder), dontEmitDiveChangedSignal(false), selectionSaved(false) { @@ -58,7 +55,7 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec // TODO FIXME we need this to get the header names // can we find a smarter way? - DiveTripModel *tripModel = new DiveTripModel(this); + tripModel = new DiveTripModel(this); // set the default width as a minimum between the hard-coded defaults, // the header text width and the (assumed) content width, calculated @@ -94,8 +91,8 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec if (sw > width) width = sw; width += zw; // small padding - if (width > defaultWidth[col]) - defaultWidth[col] = width; + if (width > tripModel->columnWidth(col)) + tripModel->setColumnWidth(col, width); } delete tripModel; @@ -114,7 +111,7 @@ DiveListView::~DiveListView() if (isColumnHidden(i)) continue; // we used to hardcode them all to 100 - so that might still be in the settings - if (columnWidth(i) == 100 || columnWidth(i) == defaultWidth[i]) + if (columnWidth(i) == 100 || columnWidth(i) == tripModel->columnWidth(i)) settings.remove(QString("colwidth%1").arg(i)); else settings.setValue(QString("colwidth%1").arg(i), columnWidth(i)); @@ -140,7 +137,7 @@ void DiveListView::setupUi() if (width.isValid()) setColumnWidth(i, width.toInt()); else - setColumnWidth(i, defaultWidth[i]); + setColumnWidth(i, tripModel->columnWidth(i)); } settings.endGroup(); if (firstRun) |