From 8e04706c4d2b5ef454e1c1ffb9d5aac72118b55d Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Thu, 27 Nov 2025 10:29:27 +0100 Subject: [PATCH] editor: Fix panic in wrap_map (#43650) 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 ... --- crates/editor/src/display_map/wrap_map.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index 6d9704b5f93c0ce48d413babdd59997b02f093e6..c33bf141b94866744c607e3410f051ae8b6e1fce 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -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;