diff options
-rw-r--r-- | src/ring.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/ring.cc b/src/ring.cc index 731b1bc2..a1ef059f 100644 --- a/src/ring.cc +++ b/src/ring.cc @@ -1067,9 +1067,6 @@ Ring::frozen_row_text_offset_to_column(row_t position, } else records[1].text_start_offset = _vte_stream_head (m_text_stream); - g_assert_cmpuint(offset->text_offset, >=, records[0].text_start_offset); - g_assert_cmpuint(offset->text_offset, <, records[1].text_start_offset); - g_string_set_size (buffer, records[1].text_start_offset - records[0].text_start_offset); if (!_vte_stream_read(m_text_stream, records[0].text_start_offset, buffer->str, buffer->len)) return false; @@ -1077,6 +1074,13 @@ Ring::frozen_row_text_offset_to_column(row_t position, if (G_LIKELY (buffer->len && buffer->str[buffer->len - 1] == '\n')) buffer->len--; + /* Now that we've chopped off the likely trailing newline (which is only rarely missing, + * if the ring ends in a soft wrapped line; see bug 181), the position we're about to + * locate can be anywhere in the string, including just after its last character, + * but not beyond that. */ + g_assert_cmpuint(offset->text_offset, >=, records[0].text_start_offset); + g_assert_cmpuint(offset->text_offset, <=, records[0].text_start_offset + buffer->len); + row = index(position); /* row and buffer now contain the same text, in different representation */ @@ -1084,7 +1088,7 @@ Ring::frozen_row_text_offset_to_column(row_t position, /* count the number of characters for the given UTF-8 text offset */ off = offset->text_offset - records[0].text_start_offset; num_chars = 0; - for (i = 0; i < off && i < buffer->len; i++) { + for (i = 0; i < off; i++) { if ((buffer->str[i] & 0xC0) != 0x80) num_chars++; } |