From fc64369f9d8d3279f73b89fdd76df2fa1468ff72 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Fri, 4 Aug 2017 11:39:28 +0700 Subject: Purge history on buffer reload when NoUndo flag is on We were preserving the history in that case, so on fifo buffers (that set the NoUndo flag until the fifo is closed), we still had the history from the "previous life" of the buffer, leading crashes when trying to apply it. Fixes #1518 --- src/buffer.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/buffer.cc') diff --git a/src/buffer.cc b/src/buffer.cc index b85d01ee..147e1bbf 100644 --- a/src/buffer.cc +++ b/src/buffer.cc @@ -242,10 +242,13 @@ void Buffer::reload(StringView data, timespec fs_timestamp) if (not record_undo) { - m_changes.push_back({ Change::Erase, {0,0}, line_count() }); + // Erase history about to be invalidated history + m_history_cursor = &m_history; + m_last_save_history_cursor = &m_history; + m_history = HistoryNode{m_next_history_id++, nullptr}; + m_changes.push_back({ Change::Erase, {0,0}, line_count() }); static_cast(m_lines) = std::move(parsed_lines.lines); - m_changes.push_back({ Change::Insert, {0,0}, line_count() }); } else @@ -340,7 +343,7 @@ bool Buffer::redo(size_t count) noexcept while (count-- != 0 and m_history_cursor->redo_child) { - m_history_cursor = m_history_cursor->redo_child.get(); + m_history_cursor = m_history_cursor->redo_child; for (const Modification& modification : m_history_cursor->undo_group) apply_modification(modification); -- cgit v1.2.3