mirror of
https://github.com/alacritty/alacritty.git
synced 2025-02-24 16:06:43 -05:00
Fix OOB index in grid::DisplayIter
When resizing prior to this patch, hidden rows in Storage were not having columns added along with everything else. This feels like a bit of tech debt, but the patch is simple enough that it won't be much extra to back out later when the underlying cause is addressed (see comments in code).
This commit is contained in:
parent
8b156c7c58
commit
f897c998e9
2 changed files with 17 additions and 1 deletions
|
@ -244,7 +244,7 @@ impl<T: Copy + Clone> Grid<T> {
|
|||
}
|
||||
|
||||
fn grow_cols(&mut self, cols: index::Column, template: &T) {
|
||||
for row in self.raw.iter_mut() {
|
||||
for row in self.raw.iter_mut_raw() {
|
||||
row.grow(cols, template);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
/// implementation is provided. Anything from Vec that should be exposed must be
|
||||
/// done so manually.
|
||||
use std::ops::{Index, IndexMut};
|
||||
use std::slice;
|
||||
|
||||
use index::Line;
|
||||
|
||||
|
@ -183,10 +184,25 @@ impl<T> Storage<T> {
|
|||
self.inner.swap(a, b);
|
||||
}
|
||||
|
||||
/// Iterator over *logical* entries in the storage
|
||||
///
|
||||
/// This *does not* iterate over hidden entries.
|
||||
pub fn iter_mut(&mut self) -> IterMut<T> {
|
||||
IterMut { storage: self, index: 0 }
|
||||
}
|
||||
|
||||
/// Iterate over *all* entries in the underlying buffer
|
||||
///
|
||||
/// This includes hidden entries.
|
||||
///
|
||||
/// XXX This suggests that Storage is a leaky abstraction. Ultimately, this
|
||||
/// is needed because of the grow lines functionality implemented on
|
||||
/// this type, and maybe that's where the leak is necessitating this
|
||||
/// accessor.
|
||||
pub fn iter_mut_raw<'a>(&'a mut self) -> slice::IterMut<'a, T> {
|
||||
self.inner.iter_mut()
|
||||
}
|
||||
|
||||
pub fn rotate(&mut self, count: isize) {
|
||||
debug_assert!(count.abs() as usize <= self.inner.len());
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue