editor: Fix panic in wrap_map (#43650)
Lukas Wirth
created 1 week ago
Fixes ZED-3P9
We only clamped the end which for a completely wrong input could cause
us to construct a reversed range which will end up underflowing later
on.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Change summary
crates/editor/src/display_map/wrap_map.rs | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
Detailed changes
@@ -622,9 +622,10 @@ impl WrapSnapshot {
if transforms.item().is_some_and(|t| t.is_isomorphic()) {
input_start.0 += output_start.0 - transforms.start().0.0;
}
- let input_end = self
- .to_tab_point(output_end)
- .min(self.tab_snapshot.max_point());
+ let input_end = self.to_tab_point(output_end);
+ let max_point = self.tab_snapshot.max_point();
+ let input_start = input_start.min(max_point);
+ let input_end = input_end.min(max_point);
WrapChunks {
input_chunks: self.tab_snapshot.chunks(
input_start..input_end,
@@ -921,10 +922,10 @@ impl WrapChunks<'_> {
if self.transforms.item().is_some_and(|t| t.is_isomorphic()) {
input_start.0 += output_start.0 - self.transforms.start().0.0;
}
- let input_end = self
- .snapshot
- .to_tab_point(output_end)
- .min(self.snapshot.tab_snapshot.max_point());
+ let input_end = self.snapshot.to_tab_point(output_end);
+ let max_point = self.snapshot.tab_snapshot.max_point();
+ let input_start = input_start.min(max_point);
+ let input_end = input_end.min(max_point);
self.input_chunks.seek(input_start..input_end);
self.input_chunk = Chunk::default();
self.output_position = output_start;