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
c61a912f62
commit
5a11f85843
|
@ -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…
Reference in New Issue