Fix invalid memory access when applying modifications on an empty buffer
That can happen when undoing/redoing accross a buffer reload boundary.
This commit is contained in:
parent
62f56378c9
commit
d29419bcd6
|
@ -351,7 +351,9 @@ void Buffer::apply_modification(const Modification& modification)
|
|||
|
||||
kak_assert(is_valid(coord));
|
||||
// in modifications, end coords should be {line_count(), 0}
|
||||
kak_assert(coord != ByteCoord(line_count()-1, m_lines.back().length()));
|
||||
kak_assert((m_lines.empty() and coord == ByteCoord{0,0} ) or
|
||||
coord != ByteCoord(line_count()-1, m_lines.back().length()));
|
||||
|
||||
switch (modification.type)
|
||||
{
|
||||
case Modification::Insert:
|
||||
|
|
|
@ -68,7 +68,7 @@ inline bool Buffer::is_valid(ByteCoord c) const
|
|||
|
||||
inline bool Buffer::is_end(ByteCoord c) const
|
||||
{
|
||||
return c >= ByteCoord{line_count() - 1, m_lines.back().length()};
|
||||
return c >= end_coord();
|
||||
}
|
||||
|
||||
inline BufferIterator Buffer::begin() const
|
||||
|
@ -78,9 +78,7 @@ inline BufferIterator Buffer::begin() const
|
|||
|
||||
inline BufferIterator Buffer::end() const
|
||||
{
|
||||
if (m_lines.empty())
|
||||
return BufferIterator(*this, { 0_line, 0 });
|
||||
return BufferIterator(*this, { line_count() - 1, m_lines.back().length() });
|
||||
return BufferIterator{*this, end_coord()};
|
||||
}
|
||||
|
||||
[[gnu::always_inline]]
|
||||
|
@ -107,6 +105,8 @@ inline ByteCoord Buffer::back_coord() const
|
|||
|
||||
inline ByteCoord Buffer::end_coord() const
|
||||
{
|
||||
if (m_lines.empty())
|
||||
return { 0_line, 0 };
|
||||
return { line_count() - 1, m_lines.back().length() };
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user