mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Don't blindly copy a pointer to the heap
Copying the entry pointer and assuming that it stays valid is of course totally bogus. This is most likely the reason for the random crashes people have observed. See #992 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
e9e843dc3c
commit
f466ee61da
1 changed files with 6 additions and 1 deletions
|
@ -19,7 +19,7 @@ int DivePlotDataModel::columnCount(const QModelIndex &parent) const
|
|||
|
||||
QVariant DivePlotDataModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if ((!index.isValid()) || (index.row() >= pInfo.nr))
|
||||
if ((!index.isValid()) || (index.row() >= pInfo.nr) || pInfo.entry == 0)
|
||||
return QVariant();
|
||||
|
||||
plot_data item = pInfo.entry[index.row()];
|
||||
|
@ -167,6 +167,8 @@ void DivePlotDataModel::clear()
|
|||
if (rowCount() != 0) {
|
||||
beginRemoveRows(QModelIndex(), 0, rowCount() - 1);
|
||||
pInfo.nr = 0;
|
||||
free(pInfo.entry);
|
||||
pInfo.entry = 0;
|
||||
diveId = -1;
|
||||
dcNr = -1;
|
||||
endRemoveRows();
|
||||
|
@ -179,7 +181,10 @@ void DivePlotDataModel::setDive(dive *d, const plot_info &info)
|
|||
Q_ASSERT(d != NULL);
|
||||
diveId = d->id;
|
||||
dcNr = dc_number;
|
||||
free(pInfo.entry);
|
||||
pInfo = info;
|
||||
pInfo.entry = (struct plot_data *)malloc(sizeof(struct plot_data) * pInfo.nr);
|
||||
memcpy(pInfo.entry, info.entry, sizeof(plot_data) * pInfo.nr);
|
||||
beginInsertRows(QModelIndex(), 0, pInfo.nr - 1);
|
||||
endInsertRows();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue