Fix potential use-after-frees on redo

Don't delete the old copy of the file until after the new version is
committed to avoid a use-after-free when code tries to do things with
the active line in a COMMIT_NEW handler, as just trying to avoid doing
that hasn't really worked out.
This commit is contained in:
Thomas Goyne 2013-12-29 11:44:22 -08:00
parent 21b9fe1405
commit 20b4515c24

View file

@ -323,9 +323,12 @@ void SubsController::Redo() {
context->ass->swap(redo_stack.back().file); context->ass->swap(redo_stack.back().file);
commit_id = redo_stack.back().commit_id; commit_id = redo_stack.back().commit_id;
undo_stack.emplace_back(*context->ass, redo_stack.back().undo_description, commit_id); undo_stack.emplace_back(*context->ass, redo_stack.back().undo_description, commit_id);
redo_stack.pop_back();
context->ass->Commit("", AssFile::COMMIT_NEW); context->ass->Commit("", AssFile::COMMIT_NEW);
// Done after commit so that the old active line and selection stay alive
// while the commit is being processed
redo_stack.pop_back();
} }
wxString SubsController::GetUndoDescription() const { wxString SubsController::GetUndoDescription() const {