daa84 / neovim-gtk

gtk ui for neovim
GNU General Public License v3.0
716 stars 57 forks source link

Rendering issues and crashes in text with combining diacritic marks #214

Open vddvss opened 4 years ago

vddvss commented 4 years ago

Describe the bug When rendering text with a combining diacritic mark, nvim-gtk does not display the mark or any text after it, and crashes in certain instances with either an unwrap() on a None value or an integer overflow. I am assuming these issues are related.

To reproduce:

$ echo "123 aB\u20E3c" > test.txt

Rendering issues

Opening in NeoVim

NeoVim Screenshot

Opening NeoVim-gtk

NeoVim-gtk Screenshot

Crashes

The below were run using the debug build of master with this command:

$ RUST_BACKTRACE=full ./target/debug/nvim-gtk --no-fork test.txt

unwrap()

After entering insert mode after the number 2 and pressing backspace twice, nvim-gtk crashes with this backtrace:

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:347:21
stack backtrace:
   0:        0x1316c3478 - backtrace::backtrace::libunwind::trace::hfe5db90796807973
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/libunwind.rs:88
   1:        0x1316c3478 - backtrace::backtrace::trace_unsynchronized::hd8dacec68bc2ef8b
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/mod.rs:66
   2:        0x1316c3478 - std::sys_common::backtrace::_print::h483f4e7616d047f8
                               at src/libstd/sys_common/backtrace.rs:47
   3:        0x1316c3478 - std::sys_common::backtrace::print::h4d76d7afffd427d1
                               at src/libstd/sys_common/backtrace.rs:36
   4:        0x1316c3478 - std::panicking::default_hook::{{closure}}::h38923ab52011325c
                               at src/libstd/panicking.rs:200
   5:        0x1316c30b4 - std::panicking::default_hook::hfaadada83166639f
                               at src/libstd/panicking.rs:214
   6:        0x1316c3f90 - std::panicking::rust_panic_with_hook::h841b5ff4d0fdd5df
                               at src/libstd/panicking.rs:477
   7:        0x1316c3980 - std::panicking::continue_panic_fmt::hff745e885c8efe81
                               at src/libstd/panicking.rs:384
   8:        0x1316c37f8 - rust_begin_unwind
                               at src/libstd/panicking.rs:311
   9:        0x1316e6770 - core::panicking::panic_fmt::h2daf88b2616ca2b2
                               at src/libcore/panicking.rs:85
  10:        0x1316e6674 - core::panicking::panic::h2d0bc53a963fb996
                               at src/libcore/panicking.rs:49
  11:        0x130f247a0 - core::option::Option<T>::unwrap::ha39ccecefee64c90
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/macros.rs:12
  12:        0x130f5b66c - nvim_gtk::ui_model::line::Line::item_len_from_idx::h574408317d4bdd93
                               at src/ui_model/line.rs:189
  13:        0x130fa7cbc - nvim_gtk::ui_model::model_rect::ModelRect::extend_by_items::h4c247052251af6ce
                               at src/ui_model/model_rect.rs:117
  14:        0x130d43168 - nvim_gtk::shell::State::queue_draw_area::{{closure}}::h310b8bf976048fe8
                               at src/shell.rs:360
  15:        0x130d60d70 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::{{closure}}::h1b09f4c1c5a2b412
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  16:        0x130d61988 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::{{closure}}::h64b61ed82d480356
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  17:        0x130d8801c - <core::slice::Iter<T> as core::iter::traits::iterator::Iterator>::fold::h64bf229ab78efed9
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/slice/mod.rs:3178
  18:        0x130d60314 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::h64060538635be72d
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  19:        0x130d604f0 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::h8d7684588528c535
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  20:        0x130d5c7e4 - core::iter::traits::iterator::Iterator::for_each::h59cb09ec16bc3bc1
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/traits/iterator.rs:604
  21:        0x130dfc3c0 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::spec_extend::hf08f1b6febaeee6a
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/liballoc/vec.rs:1926
  22:        0x130dfeecc - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::h2da9dbf4a512a74e
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/liballoc/vec.rs:1909
  23:        0x130e08e04 - <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter::hba52e0c5f85b747c
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/liballoc/vec.rs:1796
  24:        0x130d5c168 - core::iter::traits::iterator::Iterator::collect::hea2ab0d74f66fcc6
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/traits/iterator.rs:1466
  25:        0x130d429f4 - nvim_gtk::shell::State::queue_draw_area::h75fb783b514ef150
                               at src/shell.rs:356
  26:        0x130dd8418 - nvim_gtk::shell::State::on_redraw::ha820a3a597578d70
                               at src/shell.rs:1328
  27:        0x130f99bec - nvim_gtk::nvim::handler::call_redraw_handler::had9fb85a628b1288
                               at src/nvim/handler.rs:199
  28:        0x130ed4d00 - nvim_gtk::nvim::handler::NvimHandler::nvim_cb::{{closure}}::h3f491e20acd9b7d6
                               at src/nvim/handler.rs:68
  29:        0x130ed62a4 - nvim_gtk::nvim::handler::safe_call::{{closure}}::h52b368a083b06da1
                               at src/nvim/handler.rs:209
  30:        0x130d4a81c - glib::source::trampoline::h606c458fa66ca41a
                               at /home/colin/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.7.1/src/source.rs:104
  31:     0x7fff981d5144 - <unknown>
  32:     0x7fff981da94c - g_main_context_dispatch
  33:     0x7fff981dae68 - <unknown>
  34:     0x7fff981daf68 - g_main_context_iteration
  35:     0x7fff984e0378 - g_application_run
  36:        0x130da0e5c - <O as gio::application::ApplicationExtManual>::run::h4ad38b5189d11fc6
                               at /home/colin/.cargo/registry/src/github.com-1ecc6299db9ec823/gio-0.6.0/src/application.rs:23
  37:        0x130d489a8 - nvim_gtk::main::hf1333b9b0aa33853
                               at src/main.rs:135
  38:        0x130e2acb4 - std::rt::lang_start::{{closure}}::h948bb0581cbeb2da
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libstd/rt.rs:64
  39:        0x1316c0154 - std::rt::lang_start_internal::{{closure}}::{{closure}}::h9f295cf887f8f17b
                               at src/libstd/rt.rs:49
  40:        0x1316c0154 - std::sys_common::backtrace::__rust_begin_short_backtrace::hcfc6ba3cb62d0e08
                               at src/libstd/sys_common/backtrace.rs:77
  41:        0x1316c373c - std::rt::lang_start_internal::{{closure}}::hc18007f9f4412875
                               at src/libstd/rt.rs:49
  42:        0x1316c373c - std::panicking::try::do_call::h2777efde8a02dd73
                               at src/libstd/panicking.rs:296
  43:        0x1316cc9e4 - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:82
  44:        0x1316c4460 - std::panicking::try::hcea24ba06de41e38
                               at src/libstd/panicking.rs:275
  45:        0x1316c4460 - std::panic::catch_unwind::hd6f674f11a82e746
                               at src/libstd/panic.rs:394
  46:        0x1316c4460 - std::rt::lang_start_internal::h602b7f145abc7776
                               at src/libstd/rt.rs:48
  47:        0x130e2ac4c - std::rt::lang_start::h345a0c36f54d2d8b
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libstd/rt.rs:64
  48:        0x130d49660 - main
  49:     0x7fff97ec4d28 - generic_start_main.isra.0
  50:     0x7fff97ec4f24 - __libc_start_main
  51:                0x0 - <unknown>

Integer overflow

After entering insert mode after the letter a and pressing backspace, nvim-gtk crashes with this backtrace:

thread 'main' panicked at 'attempt to subtract with overflow', src/ui_model/model_rect.rs:117:35
stack backtrace:
   0:        0x110c83478 - backtrace::backtrace::libunwind::trace::hfe5db90796807973
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/libunwind.rs:88
   1:        0x110c83478 - backtrace::backtrace::trace_unsynchronized::hd8dacec68bc2ef8b
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/mod.rs:66
   2:        0x110c83478 - std::sys_common::backtrace::_print::h483f4e7616d047f8
                               at src/libstd/sys_common/backtrace.rs:47
   3:        0x110c83478 - std::sys_common::backtrace::print::h4d76d7afffd427d1
                               at src/libstd/sys_common/backtrace.rs:36
   4:        0x110c83478 - std::panicking::default_hook::{{closure}}::h38923ab52011325c
                               at src/libstd/panicking.rs:200
   5:        0x110c830b4 - std::panicking::default_hook::hfaadada83166639f
                               at src/libstd/panicking.rs:214
   6:        0x110c83f90 - std::panicking::rust_panic_with_hook::h841b5ff4d0fdd5df
                               at src/libstd/panicking.rs:477
   7:        0x110c83980 - std::panicking::continue_panic_fmt::hff745e885c8efe81
                               at src/libstd/panicking.rs:384
   8:        0x110c837f8 - rust_begin_unwind
                               at src/libstd/panicking.rs:311
   9:        0x110ca6770 - core::panicking::panic_fmt::h2daf88b2616ca2b2
                               at src/libcore/panicking.rs:85
  10:        0x110ca6674 - core::panicking::panic::h2d0bc53a963fb996
                               at src/libcore/panicking.rs:49
  11:        0x110567ee0 - nvim_gtk::ui_model::model_rect::ModelRect::extend_by_items::h4c247052251af6ce
                               at src/ui_model/model_rect.rs:117
  12:        0x110303168 - nvim_gtk::shell::State::queue_draw_area::{{closure}}::h310b8bf976048fe8
                               at src/shell.rs:360
  13:        0x110320d70 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::{{closure}}::h1b09f4c1c5a2b412
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  14:        0x110321988 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::{{closure}}::h64b61ed82d480356
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  15:        0x11034801c - <core::slice::Iter<T> as core::iter::traits::iterator::Iterator>::fold::h64bf229ab78efed9
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/slice/mod.rs:3178
  16:        0x110320314 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::h64060538635be72d
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  17:        0x1103204f0 - <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::h8d7684588528c535
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/adapters/mod.rs:589
  18:        0x11031c7e4 - core::iter::traits::iterator::Iterator::for_each::h59cb09ec16bc3bc1
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/traits/iterator.rs:604
  19:        0x1103bc3c0 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::spec_extend::hf08f1b6febaeee6a
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/liballoc/vec.rs:1926
  20:        0x1103beecc - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::h2da9dbf4a512a74e
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/liballoc/vec.rs:1909
  21:        0x1103c8e04 - <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter::hba52e0c5f85b747c
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/liballoc/vec.rs:1796
  22:        0x11031c168 - core::iter::traits::iterator::Iterator::collect::hea2ab0d74f66fcc6
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libcore/iter/traits/iterator.rs:1466
  23:        0x1103029f4 - nvim_gtk::shell::State::queue_draw_area::h75fb783b514ef150
                               at src/shell.rs:356
  24:        0x110398418 - nvim_gtk::shell::State::on_redraw::ha820a3a597578d70
                               at src/shell.rs:1328
  25:        0x110559bec - nvim_gtk::nvim::handler::call_redraw_handler::had9fb85a628b1288
                               at src/nvim/handler.rs:199
  26:        0x110494d00 - nvim_gtk::nvim::handler::NvimHandler::nvim_cb::{{closure}}::h3f491e20acd9b7d6
                               at src/nvim/handler.rs:68
  27:        0x1104962a4 - nvim_gtk::nvim::handler::safe_call::{{closure}}::h52b368a083b06da1
                               at src/nvim/handler.rs:209
  28:        0x11030a81c - glib::source::trampoline::h606c458fa66ca41a
                               at /home/colin/.cargo/registry/src/github.com-1ecc6299db9ec823/glib-0.7.1/src/source.rs:104
  29:     0x7fffba095144 - <unknown>
  30:     0x7fffba09a94c - g_main_context_dispatch
  31:     0x7fffba09ae68 - <unknown>
  32:     0x7fffba09af68 - g_main_context_iteration
  33:     0x7fffba3a0378 - g_application_run
  34:        0x110360e5c - <O as gio::application::ApplicationExtManual>::run::h4ad38b5189d11fc6
                               at /home/colin/.cargo/registry/src/github.com-1ecc6299db9ec823/gio-0.6.0/src/application.rs:23
  35:        0x1103089a8 - nvim_gtk::main::hf1333b9b0aa33853
                               at src/main.rs:135
  36:        0x1103eacb4 - std::rt::lang_start::{{closure}}::h948bb0581cbeb2da
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libstd/rt.rs:64
  37:        0x110c80154 - std::rt::lang_start_internal::{{closure}}::{{closure}}::h9f295cf887f8f17b
                               at src/libstd/rt.rs:49
  38:        0x110c80154 - std::sys_common::backtrace::__rust_begin_short_backtrace::hcfc6ba3cb62d0e08
                               at src/libstd/sys_common/backtrace.rs:77
  39:        0x110c8373c - std::rt::lang_start_internal::{{closure}}::hc18007f9f4412875
                               at src/libstd/rt.rs:49
  40:        0x110c8373c - std::panicking::try::do_call::h2777efde8a02dd73
                               at src/libstd/panicking.rs:296
  41:        0x110c8c9e4 - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:82
  42:        0x110c84460 - std::panicking::try::hcea24ba06de41e38
                               at src/libstd/panicking.rs:275
  43:        0x110c84460 - std::panic::catch_unwind::hd6f674f11a82e746
                               at src/libstd/panic.rs:394
  44:        0x110c84460 - std::rt::lang_start_internal::h602b7f145abc7776
                               at src/libstd/rt.rs:48
  45:        0x1103eac4c - std::rt::lang_start::h345a0c36f54d2d8b
                               at /rustc/eae3437dfe991621e8afdc82734f4a172d7ddf9b/src/libstd/rt.rs:64
  46:        0x110309660 - main
  47:     0x7fffb9d84d28 - generic_start_main.isra.0
  48:     0x7fffb9d84f24 - __libc_start_main
  49:                0x0 - <unknown>

Technical information (please complete the following information):

XVilka commented 4 years ago

Can confirm.