diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index c230879..2b113c2 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -345,13 +345,13 @@ void PieceTable::insertion_test(Cursor & c) m_append_buffer[m_append_buffer_index++] = 'z'; Change * change = &m_changes_buffer[m_changes_buffer_index++]; - change->links[0][0][0] = c.iterator.piece->prev; - change->links[0][0][1] = c.iterator.piece; - change->links[0][1][0] = c.iterator.piece; - change->links[0][1][1] = c.iterator.piece->next; if (c.iterator.valid()) { + change->links[0][0][0] = c.iterator.piece->prev; + change->links[0][0][1] = c.iterator.piece; + change->links[0][1][0] = c.iterator.piece; + change->links[0][1][1] = c.iterator.piece->next; if (c.iterator.offset > 0u) { Piece * piece2 = add_piece(); @@ -395,6 +395,10 @@ void PieceTable::insertion_test(Cursor & c) } else { + change->links[0][0][0] = start_piece; + change->links[0][0][1] = end_piece; + change->links[0][1][0] = nullptr; + change->links[0][1][1] = nullptr; change->links[1][0][0] = start_piece; change->links[1][0][1] = piece; change->links[1][1][0] = piece; @@ -419,6 +423,9 @@ void PieceTable::apply_change(Change * change, uint8_t forward) { change->links[forward][0][0]->next = change->links[forward][0][1]; change->links[forward][0][1]->prev = change->links[forward][0][0]; - change->links[forward][1][0]->next = change->links[forward][1][1]; - change->links[forward][1][1]->prev = change->links[forward][1][0]; + if (change->links[forward][1][0] != nullptr) + { + change->links[forward][1][0]->next = change->links[forward][1][1]; + change->links[forward][1][1]->prev = change->links[forward][1][0]; + } }