mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 14:25:27 +00:00
Undo: clear list of trips to be recreated in UndoDeleteDive::undo()
UndoDeleteDive::tripList kept track of the trips to be recreated on undo. But the list wasn't cleared on undo, thus on subsequent redo the same trip was readded to the list, leading to double-free. This could trivially be reproduced by repeated CTRL-Z, CTRL-SHIFT-Z pairs. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
6c95714b9f
commit
b51e616b6a
1 changed files with 3 additions and 1 deletions
|
@ -33,6 +33,7 @@ void UndoDeleteDive::undo()
|
|||
record_dive(diveList.at(i));
|
||||
}
|
||||
mark_divelist_changed(true);
|
||||
tripList.clear();
|
||||
MainWindow::instance()->refreshDisplay();
|
||||
}
|
||||
|
||||
|
@ -56,9 +57,10 @@ void UndoDeleteDive::redo()
|
|||
undo_trip->dives = NULL;
|
||||
// update all the dives who were in this trip to point to the copy of the
|
||||
// trip that we are about to delete implicitly when deleting its last dive below
|
||||
Q_FOREACH(struct dive *inner_dive, newList)
|
||||
Q_FOREACH(struct dive *inner_dive, newList) {
|
||||
if (inner_dive->divetrip == d->divetrip)
|
||||
inner_dive->divetrip = undo_trip;
|
||||
}
|
||||
d->divetrip = undo_trip;
|
||||
tripList.append(undo_trip);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue