Change summary
crates/multi_buffer/src/multi_buffer.rs | 10 ++++++++--
crates/multi_buffer/src/multi_buffer_tests.rs | 11 +++++++++++
2 files changed, 19 insertions(+), 2 deletions(-)
Detailed changes
@@ -4175,6 +4175,9 @@ impl MultiBufferSnapshot {
let region = cursor.region()?;
let overshoot = offset - region.range.start;
let buffer_offset = region.buffer_range.start + overshoot;
+ if buffer_offset > region.buffer.len() {
+ return None;
+ }
Some((region.buffer, buffer_offset))
}
@@ -4183,8 +4186,11 @@ impl MultiBufferSnapshot {
cursor.seek(&point);
let region = cursor.region()?;
let overshoot = point - region.range.start;
- let buffer_offset = region.buffer_range.start + overshoot;
- Some((region.buffer, buffer_offset, region.is_main_buffer))
+ let buffer_point = region.buffer_range.start + overshoot;
+ if buffer_point > region.buffer.max_point() {
+ return None;
+ }
+ Some((region.buffer, buffer_point, region.is_main_buffer))
}
pub fn suggested_indents(
@@ -3378,6 +3378,17 @@ fn assert_position_translation(snapshot: &MultiBufferSnapshot) {
}
}
}
+
+ let point = snapshot.max_point();
+ let Some((buffer, offset)) = snapshot.point_to_buffer_offset(point) else {
+ return;
+ };
+ assert!(offset <= buffer.len(),);
+
+ let Some((buffer, point, _)) = snapshot.point_to_buffer_point(point) else {
+ return;
+ };
+ assert!(point <= buffer.max_point(),);
}
fn assert_line_indents(snapshot: &MultiBufferSnapshot) {