mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
53c1c3f26b
commit
e3118d915c
4 changed files with 40 additions and 8 deletions
|
@ -6,6 +6,7 @@
|
|||
#include "core/helpers.h"
|
||||
#include "core/dive.h"
|
||||
#include <QIcon>
|
||||
#include <QDebug>
|
||||
|
||||
static int nitrox_sort_value(struct dive *dive)
|
||||
{
|
||||
|
@ -407,6 +408,18 @@ DiveTripModel::DiveTripModel(QObject *parent) :
|
|||
currentLayout(TREE)
|
||||
{
|
||||
columns = COLUMNS;
|
||||
// setup the default width of columns (px)
|
||||
columnWidthMap = QVector<int>(COLUMNS);
|
||||
// pre-fill with 50px; the rest are explicit
|
||||
for(int i = 0; i < COLUMNS; i++)
|
||||
columnWidthMap[i] = 50;
|
||||
columnWidthMap[NR] = 70;
|
||||
columnWidthMap[DATE] = 140;
|
||||
columnWidthMap[RATING] = 90;
|
||||
columnWidthMap[SUIT] = 70;
|
||||
columnWidthMap[SAC] = 70;
|
||||
columnWidthMap[PHOTOS] = 5;
|
||||
columnWidthMap[LOCATION] = 500;
|
||||
}
|
||||
|
||||
Qt::ItemFlags DiveTripModel::flags(const QModelIndex &index) const
|
||||
|
@ -605,3 +618,21 @@ bool DiveTripModel::setData(const QModelIndex &index, const QVariant &value, int
|
|||
return false;
|
||||
return diveItem->setData(index, value, role);
|
||||
}
|
||||
|
||||
int DiveTripModel::columnWidth(int column)
|
||||
{
|
||||
if (column > COLUMNS - 1 || column < 0) {
|
||||
qWarning() << "DiveTripModel::columnWidth(): not a valid column index -" << column;
|
||||
return 50;
|
||||
}
|
||||
return columnWidthMap[column];
|
||||
}
|
||||
|
||||
void DiveTripModel::setColumnWidth(int column, int width)
|
||||
{
|
||||
if (column > COLUMNS - 1 || column < 0) {
|
||||
qWarning() << "DiveTripModel::setColumnWidth(): not a valid column index -" << column;
|
||||
return;
|
||||
}
|
||||
columnWidthMap[column] = width;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue