workspace: Sanitize pinned tab count before usage (#21417)
Piotr Osiewicz
created 1 year ago
Fixes all sorts of panics around usage of incorrect pinned tab count
that has been fixed in app itself, yet persists in user db.
Closes #ISSUE
Release Notes:
- N/A
Change summary
crates/workspace/src/pane.rs | 2 +-
crates/workspace/src/persistence/model.rs | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
Detailed changes
@@ -1890,7 +1890,7 @@ impl Pane {
fn unpin_tab_at(&mut self, ix: usize, cx: &mut ViewContext<'_, Self>) {
maybe!({
let pane = cx.view().clone();
- self.pinned_tab_count = self.pinned_tab_count.checked_sub(1).unwrap();
+ self.pinned_tab_count = self.pinned_tab_count.checked_sub(1)?;
let destination_index = self.pinned_tab_count;
let id = self.item_for_index(ix)?.item_id();
@@ -473,7 +473,7 @@ impl SerializedPane {
})?;
}
pane.update(cx, |pane, _| {
- pane.set_pinned_count(self.pinned_count);
+ pane.set_pinned_count(self.pinned_count.min(items.len()));
})?;
anyhow::Ok(items)