Skip to content

Uncollapsing after removing and readding children crashes the program #27

@Erv00

Description

@Erv00

If a node is collapsed, and its children is removed, and others are added, then the node is uncollapsed the program crashes.

Example program:

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions