Wilfred / difftastic

a structural diff that understands syntax 🟥🟩
https://difftastic.wilfred.me.uk/
MIT License
19.94k stars 317 forks source link

index out of bounds: the len is X but the index is X', src/display/inline.rs:115:21 #702

Open olivergondza opened 2 months ago

olivergondza commented 2 months ago

Giving this interesting tool a try as an external git diff tool, I have stumbled upon thich crash.

Note this only happen with difft --display inline, works fine with difft.

A description of the issue. A screenshot is often helpful too.

Diffing staged changes with file removal (private code and repo):

thread 'main' panicked at 'index out of bounds: the len is 135 but the index is 135', src/display/inline.rs:115:21
stack backtrace:
   0:     0x6444c126e2a5 - std::backtrace_rs::backtrace::libunwind::trace::h32eb3e08e874dd27
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x6444c126e2a5 - std::backtrace_rs::backtrace::trace_unsynchronized::haa3f451d27bc11a5
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x6444c126e2a5 - std::sys_common::backtrace::_print_fmt::h5b94a01bb4289bb5
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:66:5
   3:     0x6444c126e2a5 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb070b7fa7e3175df
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:45:22
   4:     0x6444c103504e - core::fmt::write::hd5207aebbb9a86e9
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/fmt/mod.rs:1202:17
   5:     0x6444c126a7f5 - std::io::Write::write_fmt::h3bd699bbd129ab8a
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/io/mod.rs:1679:15
   6:     0x6444c126fa13 - std::sys_common::backtrace::_print::h7a21be552fdf58da
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:48:5
   7:     0x6444c126fa13 - std::sys_common::backtrace::print::ha85c41fe4dd80b13
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:35:9
   8:     0x6444c126fa13 - std::panicking::default_hook::{{closure}}::h04cca40023d0eeca
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:295:22
   9:     0x6444c126f71f - std::panicking::default_hook::haa3ca8c310ed5402
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:314:9
  10:     0x6444c127003c - std::panicking::rust_panic_with_hook::h7b190ce1a948faac
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:698:17
  11:     0x6444c126ff44 - std::panicking::begin_panic_handler::{{closure}}::hbafbfdc3e1b97f68
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:588:13
  12:     0x6444c126e7ac - std::sys_common::backtrace::__rust_end_short_backtrace::hda93e5fef243b4c0
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:138:18
  13:     0x6444c126fc92 - rust_begin_unwind
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:584:5
  14:     0x6444c0f913a3 - core::panicking::panic_fmt::h8d17ca1073d9a733
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:142:14
  15:     0x6444c0f912e2 - core::panicking::panic_bounds_check::h8a412b863558c16a
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:84:5
  16:     0x6444c1087293 - <usize as core::slice::index::SliceIndex<[T]>>::index::h969c72604e95251d
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/slice/index.rs:250:10
  17:     0x6444c1087293 - core::slice::index::<impl core::ops::index::Index<I> for [T]>::index::hc4f5c2a6c59993f8
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/slice/index.rs:18:9
  18:     0x6444c1087293 - <alloc::vec::Vec<T,A> as core::ops::index::Index<I>>::index::h7097a03de58189a7
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/alloc/src/vec/mod.rs:2628:9
  19:     0x6444c1087293 - difft::display::inline::print::h2cb9f2dbb5b971b1
                               at /usr/src/debug/difftastic-git/difftastic-git/src/display/inline.rs:115:21
  20:     0x6444c10bd254 - difft::print_diff_result::hb3ee8d1585cccc72
                               at /usr/src/debug/difftastic-git/difftastic-git/src/main.rs:817:21
  21:     0x6444c10b91fe - difft::main::h5bf17de676bb4b83
                               at /usr/src/debug/difftastic-git/difftastic-git/src/main.rs:318:29
  22:     0x6444c1062d46 - core::ops::function::FnOnce::call_once::h747e67ba6954cd76
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:248:5
  23:     0x6444c1062d46 - std::sys_common::backtrace::__rust_begin_short_backtrace::h5cec4ed45e1eddf6
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:122:18
  24:     0x6444c10a975c - std::rt::lang_start::{{closure}}::h1987d5ae5c4370c0
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:166:18
  25:     0x6444c12644fa - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hb69be6e0857c6cfb
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:283:13
  26:     0x6444c12644fa - std::panicking::try::do_call::h396dfc441ee9c786
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:492:40
  27:     0x6444c12644fa - std::panicking::try::h6cdda972d28b3a4f
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:456:19
  28:     0x6444c12644fa - std::panic::catch_unwind::h376039ec264e8ef9
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panic.rs:137:14
  29:     0x6444c12644fa - std::rt::lang_start_internal::{{closure}}::hc94720ca3d4cb727
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:148:48
  30:     0x6444c12644fa - std::panicking::try::do_call::h2422fb95933fa2d5
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:492:40
  31:     0x6444c12644fa - std::panicking::try::h488286b5ec8333ff
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:456:19
  32:     0x6444c12644fa - std::panic::catch_unwind::h81636549836d2a25
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panic.rs:137:14
  33:     0x6444c12644fa - std::rt::lang_start_internal::h6ba1bb743c1e9df9
                               at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:148:20
  34:     0x6444c10bd3f7 - main
  35:     0x73463dd57cd0 - <unknown>
  36:     0x73463dd57d8a - __libc_start_main
  37:     0x6444c0fb03e5 - _start
  38:                0x0 - <unknown>
fatal: external diff died, stopping at filename

The version of difftastic you're using (see difft --version) and your operating system.

Difftastic 0.58.0 (f52ca706f 2024-04-09, built with rustc 1.65.0) Linux arch 6.8.4-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 05 Apr 2024 00:14:23 +0000 x86_64 GNU/Linux