ITADN

Uncollapsing after removing and readding children crashes the program

#27OpenErv00 创建于 2023-01-21
E
Erv00commented
If a node is collapsed, and its children is removed, and others are added, then the node is uncollapsed the program crashes. Example program: ```rust use cursive_tree_view::{Placement, TreeView}; fn main() { let mut tree = TreeView::new(); tree.insert_item("A", Placement::LastChild, 0); tree.insert_item("B", Placement::LastChild, 0); tree.insert_item("C", Placement::LastChild, 1); tree.insert_item("D", Placement::LastChild, 2); tree.insert_item("E", Placement::LastChild, 2); tree.set_collapsed(2, true); let mut removed = tree.remove_children(2).unwrap().into_iter().collect::<Vec<_>>(); removed.push("F"); for child in removed { tree.insert_item(child, Placement::LastChild, 2); } let mut siv = cursive::default(); siv.add_layer(tree); siv.run(); } ``` If you run the program and try to unfold C, it crashes with the following backtrace: ``` thread 'main' panicked at 'index out of bounds: the len is 6 but the index is 6', /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_tree_view-0.8.0/src/lib.rs:504:25 stack backtrace: 0: rust_begin_unwind at /rustc/a8314ef7d0ec7b75c336af2c9857bfaf43002bfc/library/std/src/panicking.rs:584:5 1: core::panicking::panic_fmt at /rustc/a8314ef7d0ec7b75c336af2c9857bfaf43002bfc/library/core/src/panicking.rs:142:14 2: core::panicking::panic_bounds_check at /rustc/a8314ef7d0ec7b75c336af2c9857bfaf43002bfc/library/core/src/panicking.rs:84:5 3: <cursive_tree_view::TreeView<T> as cursive_core::view::view_trait::View>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_tree_view-0.8.0/src/lib.rs:504:25 4: cursive_core::view::view_wrapper::ViewWrapper::wrap_draw::{{closure}} at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:54:28 5: <cursive_core::views::boxed_view::BoxedView as cursive_core::view::view_wrapper::ViewWrapper>::with_view at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/boxed_view.rs:52:14 6: cursive_core::view::view_wrapper::ViewWrapper::wrap_draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:54:9 7: cursive_core::view::view_wrapper::<impl cursive_core::view::view_trait::View for T>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:112:9 8: cursive_core::view::view_wrapper::ViewWrapper::wrap_draw::{{closure}} at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:54:28 9: <cursive_core::views::circular_focus::CircularFocus<T> as cursive_core::view::view_wrapper::ViewWrapper>::with_view at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:183:41 10: cursive_core::view::view_wrapper::ViewWrapper::wrap_draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:54:9 11: cursive_core::view::view_wrapper::<impl cursive_core::view::view_trait::View for T>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:112:9 12: <cursive_core::views::layer::Layer<T> as cursive_core::view::view_wrapper::ViewWrapper>::wrap_draw::{{closure}} at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/layer.rs:50:13 13: cursive_core::printer::Printer::with_color at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/printer.rs:349:9 14: <cursive_core::views::layer::Layer<T> as cursive_core::view::view_wrapper::ViewWrapper>::wrap_draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/layer.rs:46:9 15: cursive_core::view::view_wrapper::<impl cursive_core::view::view_trait::View for T>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:112:9 16: <cursive_core::views::shadow_view::ShadowView<T> as cursive_core::view::view_wrapper::ViewWrapper>::wrap_draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/shadow_view.rs:108:9 17: cursive_core::view::view_wrapper::<impl cursive_core::view::view_trait::View for T>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/view/view_wrapper.rs:112:9 18: <cursive_core::views::stack_view::ChildWrapper<T> as cursive_core::view::view_trait::View>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/stack_view.rs:137:44 19: cursive_core::views::stack_view::StackView::draw_fg::{{closure}} at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/stack_view.rs:564:17 20: cursive_core::printer::Printer::with_effects at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/printer.rs:424:21 21: cursive_core::printer::Printer::with_style::{{closure}} at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/printer.rs:382:13 22: cursive_core::printer::Printer::with_color at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/printer.rs:349:9 23: cursive_core::printer::Printer::with_style at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/printer.rs:381:9 24: cursive_core::views::stack_view::StackView::draw_fg at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/stack_view.rs:559:9 25: cursive_core::views::screens_view::ScreensView<cursive_core::views::stack_view::StackView>::draw_fg at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/views/screens_view.rs:98:13 26: cursive_core::cursive::Cursive::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive.rs:147:9 27: cursive_core::cursive_run::CursiveRunner<C>::draw at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive_run.rs:100:9 28: cursive_core::cursive_run::CursiveRunner<C>::refresh at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive_run.rs:195:9 29: cursive_core::cursive_run::CursiveRunner<C>::post_events at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive_run.rs:175:13 30: cursive_core::cursive_run::CursiveRunner<C>::step at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive_run.rs:217:9 31: cursive_core::cursive_run::CursiveRunner<C>::run at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive_run.rs:239:13 32: cursive_core::cursive::Cursive::try_run_with at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive_core-0.3.7/src/cursive.rs:919:9 33: cursive::cursive_runnable::CursiveRunnable::try_run at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.20.0/src/cursive_runnable.rs:80:9 34: cursive::cursive_runnable::CursiveRunnable::run at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/cursive-0.20.0/src/cursive_runnable.rs:75:9 35: viewtest::main at ./src/main.rs:25:5 36: core::ops::function::FnOnce::call_once at /rustc/a8314ef7d0ec7b75c336af2c9857bfaf43002bfc/library/core/src/ops/function.rs:248:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. ```
0 条评论