mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
tankinfomodel.cpp: clamp row index to [0 - MAX_TANK_INFO]
MAX_TANK_INFO is a new macro in dive.h to define the maximum number of tank_info_t objects. TankInfoModel's data() and setData() now check for valid row indexes before accessing the tank_info[] array directly. Without this patch TankInfoMode::data() can cause a SIGSEGV. Reported-by: Pedro Neves <nevesdiver@gmail.com> Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
85021b94b1
commit
27deb317b0
2 changed files with 7 additions and 2 deletions
|
@ -296,6 +296,7 @@ struct divecomputer {
|
||||||
|
|
||||||
#define MAX_CYLINDERS (20)
|
#define MAX_CYLINDERS (20)
|
||||||
#define MAX_WEIGHTSYSTEMS (6)
|
#define MAX_WEIGHTSYSTEMS (6)
|
||||||
|
#define MAX_TANK_INFO (100)
|
||||||
#define W_IDX_PRIMARY 0
|
#define W_IDX_PRIMARY 0
|
||||||
#define W_IDX_SECONDARY 1
|
#define W_IDX_SECONDARY 1
|
||||||
|
|
||||||
|
@ -923,7 +924,7 @@ struct tank_info_t {
|
||||||
const char *name;
|
const char *name;
|
||||||
int cuft, ml, psi, bar;
|
int cuft, ml, psi, bar;
|
||||||
};
|
};
|
||||||
extern struct tank_info_t tank_info[100];
|
extern struct tank_info_t tank_info[MAX_TANK_INFO];
|
||||||
|
|
||||||
struct ws_info_t {
|
struct ws_info_t {
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
|
@ -28,6 +28,10 @@ bool TankInfoModel::setData(const QModelIndex &index, const QVariant &value, int
|
||||||
{
|
{
|
||||||
//WARN Seems wrong, we need to check for role == Qt::EditRole
|
//WARN Seems wrong, we need to check for role == Qt::EditRole
|
||||||
Q_UNUSED(role);
|
Q_UNUSED(role);
|
||||||
|
|
||||||
|
if (index.row() < 0 || index.row() > MAX_TANK_INFO - 1)
|
||||||
|
return false;
|
||||||
|
|
||||||
struct tank_info_t *info = &tank_info[index.row()];
|
struct tank_info_t *info = &tank_info[index.row()];
|
||||||
switch (index.column()) {
|
switch (index.column()) {
|
||||||
case DESCRIPTION:
|
case DESCRIPTION:
|
||||||
|
@ -51,7 +55,7 @@ void TankInfoModel::clear()
|
||||||
QVariant TankInfoModel::data(const QModelIndex &index, int role) const
|
QVariant TankInfoModel::data(const QModelIndex &index, int role) const
|
||||||
{
|
{
|
||||||
QVariant ret;
|
QVariant ret;
|
||||||
if (!index.isValid()) {
|
if (!index.isValid() || index.row() < 0 || index.row() > MAX_TANK_INFO - 1) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (role == Qt::FontRole) {
|
if (role == Qt::FontRole) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue