From 6535a148b592c1a5cabc34a9071209fb6a032790 Mon Sep 17 00:00:00 2001 From: "gcp-cherry-pick-bot[bot]" <98988430+gcp-cherry-pick-bot[bot]@users.noreply.github.com> Date: Thu, 5 Jun 2025 16:00:22 -0600 Subject: [PATCH] Fix innermost brackets panic (cherry-pick #32120) (#32189) Cherry-picked Fix innermost brackets panic (#32120) Release Notes: - Fixed a few rare panics that could happen when a multibuffer excerpt started with expanded deleted content. Co-authored-by: Conrad Irwin --- crates/multi_buffer/src/multi_buffer.rs | 2 +- crates/multi_buffer/src/multi_buffer_tests.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index cbcedd543dc7528b23248a7782e2511e1c514df7..6a46bc6984085f8a04614cc6437369a8b5a8c3c2 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -6213,7 +6213,7 @@ impl MultiBufferSnapshot { cursor.seek_to_start_of_current_excerpt(); let region = cursor.region()?; let offset = region.range.start; - let buffer_offset = region.buffer_range.start; + let buffer_offset = start_excerpt.buffer_start_offset(); let excerpt_offset = cursor.excerpts.start().clone(); Some(MultiBufferExcerpt { diff_transforms: cursor.diff_transforms, diff --git a/crates/multi_buffer/src/multi_buffer_tests.rs b/crates/multi_buffer/src/multi_buffer_tests.rs index 704c9abbe85bdac271535ecb3f7c66ec7002a7b4..435bfd56baa6da4585137867f7003704a12a2971 100644 --- a/crates/multi_buffer/src/multi_buffer_tests.rs +++ b/crates/multi_buffer/src/multi_buffer_tests.rs @@ -2842,6 +2842,22 @@ async fn test_random_multibuffer(cx: &mut TestAppContext, mut rng: StdRng) { .unwrap() + 1 ); + let reference_ranges = cx.update(|cx| { + reference + .excerpts + .iter() + .map(|excerpt| { + ( + excerpt.id, + excerpt.range.to_offset(&excerpt.buffer.read(cx).snapshot()), + ) + }) + .collect::>() + }); + for i in 0..snapshot.len() { + let excerpt = snapshot.excerpt_containing(i..i).unwrap(); + assert_eq!(excerpt.buffer_range(), reference_ranges[&excerpt.id()]); + } assert_consistent_line_numbers(&snapshot); assert_position_translation(&snapshot);