Fix use of invalidated iterators in highlight_range

Fixes #2755
This commit is contained in:
Maxime Coste 2019-03-05 20:31:40 +11:00
parent 699d066ebd
commit f9d421130f
4 changed files with 15 additions and 7 deletions

View File

@ -133,7 +133,7 @@ void apply_highlighter(HighlightContext context,
using LineIterator = DisplayBuffer::LineList::iterator;
LineIterator first_line;
Vector<DisplayLine::iterator> insert_pos;
Vector<size_t> insert_idx;
auto line_end = display_buffer.lines().end();
DisplayBuffer region_display;
@ -147,8 +147,6 @@ void apply_highlighter(HighlightContext context,
if (region_lines.empty())
first_line = line_it;
region_lines.emplace_back();
insert_pos.emplace_back();
if (range.begin < begin or range.end > end)
{
@ -184,14 +182,16 @@ void apply_highlighter(HighlightContext context,
}
}
}
region_lines.emplace_back();
std::move(line.begin() + beg_idx, line.begin() + end_idx,
std::back_inserter(region_lines.back()));
insert_pos.back() = line.erase(line.begin() + beg_idx, line.begin() + end_idx);
auto it = line.erase(line.begin() + beg_idx, line.begin() + end_idx);
insert_idx.push_back(it - line.begin());
}
else
{
region_lines.back() = std::move(line);
insert_pos.back() = line.begin();
insert_idx.push_back(0);
region_lines.push_back(std::move(line));
}
}
@ -204,7 +204,7 @@ void apply_highlighter(HighlightContext context,
for (size_t i = 0; i < region_lines.size(); ++i)
{
auto& line = *(first_line + i);
auto pos = insert_pos[i];
auto pos = line.begin() + insert_idx[i];
for (auto& atom : region_lines[i])
pos = ++line.insert(pos, std::move(atom));
}

View File

@ -0,0 +1,2 @@
If you're not reporting a bug (e.g. requesting a feature or asking a general question), feel free to remove this template.
Otherwise, please edit the following sections with the relevant information ().

View File

@ -0,0 +1,5 @@
add-highlighter buffer/regions regions
add-highlighter buffer/regions/inline default-region regions
add-highlighter buffer/ wrap
add-highlighter buffer/ wrap -indent