Maybe fix panic (#29352)
Conrad Irwin
created 8 months ago
Since around the time we shipped block diagnostics, we've been seeing an
out of range panic in the editor.
Although the code is heavily inlined, so the stacktrace is missing, this
seems like a likely place that indexing may have gone wrong.
Release Notes:
- Fixed a rare panic in the editor
Change summary
crates/editor/src/element.rs | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
Detailed changes
@@ -2661,19 +2661,21 @@ impl EditorElement {
text_x + layout.width,
))
};
- x_position = if rows.contains(&align_to.row()) {
- x_and_width(&line_layouts[align_to.row().minus(rows.start) as usize])
- } else {
- x_and_width(&layout_line(
- align_to.row(),
- snapshot,
- &self.style,
- editor_width,
- is_row_soft_wrapped,
- window,
- cx,
- ))
- };
+ let line_ix = align_to.row().0.checked_sub(rows.start.0);
+ x_position =
+ if let Some(layout) = line_ix.and_then(|ix| line_layouts.get(ix as usize)) {
+ x_and_width(&layout)
+ } else {
+ x_and_width(&layout_line(
+ align_to.row(),
+ snapshot,
+ &self.style,
+ editor_width,
+ is_row_soft_wrapped,
+ window,
+ cx,
+ ))
+ };
let anchor_x = x_position.unwrap().0;