From 878b9aaf34c2aa251f24d2e9478ced393c368549 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 26 Oct 2016 22:03:28 -0400 Subject: [PATCH] Make Cursor::is_start_of_line() and Cursor::is_end_of_line() safe for empty pieces --- src/core/PieceTable.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/core/PieceTable.cc b/src/core/PieceTable.cc index 9136173..e7d09c0 100644 --- a/src/core/PieceTable.cc +++ b/src/core/PieceTable.cc @@ -335,17 +335,18 @@ void PieceTable::Cursor::warp_to_inserted_piece(Piece * piece) bool PieceTable::Cursor::is_start_of_line() { - return iterator.valid() && - (iterator.offset == 0u) && - ((iterator.piece->prev == iterator.piece_table->start_piece) || - iterator.piece->prev->eol()); + if (!iterator.valid() || (iterator.offset > 0u)) + { + return false; + } + Iterator iterator2 = iterator; + iterator2.go_prev_piece(); + return iterator2.piece_eol() || !iterator2.valid(); } bool PieceTable::Cursor::is_end_of_line() { - return iterator.valid() && - ((iterator.offset + iterator.num_bytes_in_code_point()) >= iterator.piece->length) && - (iterator.piece->eol() || (iterator.piece->next == iterator.piece_table->end_piece)); + return *iterator == INTERNAL_EOL; } PieceTable::Piece * PieceTable::Cursor::prev_line() const