delta icon indicating copy to clipboard operation
delta copied to clipboard

🐛 index out of bounds crash with malformed patch

Open adamchainz opened this issue 2 years ago • 5 comments

Lines like @@ @@ crash delta:

echo "@@  @@\n" | RUST_BACKTRACE=full delta
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', src/features/line_numbers.rs:188:28
stack backtrace:
   0:        0x1043dc5f4 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h71d20ef014883dc3
   1:        0x1043f4584 - core::fmt::write::hd114a9636e34e383
   2:        0x1043c73b0 - std::io::Write::write_fmt::h05898edc92938c00
   3:        0x1043cc61c - std::panicking::default_hook::{{closure}}::hbd40827d346a3df4
   4:        0x1043cc2ac - std::panicking::default_hook::hf2e0d2c157a06c84
   5:        0x1043cce40 - std::panicking::rust_panic_with_hook::h33fd2dae40c879df
   6:        0x1043dcd50 - std::panicking::begin_panic_handler::{{closure}}::h81ef06081ce645db
   7:        0x1043dc730 - std::sys_common::backtrace::__rust_end_short_backtrace::hc514eeb5ddb8eaf3
   8:        0x1043cca60 - _rust_begin_unwind
   9:        0x10440adc8 - core::panicking::panic_fmt::h520fb0ef56e6cee7
  10:        0x10440ad38 - core::panicking::panic_bounds_check::hde40779dd2c2d133
  11:        0x1041cbd9c - delta::features::line_numbers::LineNumbersData::initialize_hunk::haf94d2662d9d42ca
  12:        0x10423c0fc - delta::handlers::hunk::<impl delta::delta::StateMachine>::handle_hunk_line::h2ada95a2c0f7de1d
  13:        0x10423720c - delta::delta::delta::hecc571c151b5ea45
  14:        0x1041d88dc - delta::main::h61fdfe5805657fec
  15:        0x10424bd50 - std::sys_common::backtrace::__rust_begin_short_backtrace::h1036dd8be6111153
  16:        0x1041da734 - std::rt::lang_start::{{closure}}::h918f7bf93157e659
  17:        0x1043cb550 - std::rt::lang_start_internal::h3f58ab0124dae34f
  18:        0x1041d9410 - _main

adamchainz avatar Jan 09 '23 12:01 adamchainz

Thanks @adamchainz. What delta version is this? It doesn't seem to reproduce on master or 0.15.1 (MacOS).

dandavison avatar Jan 13 '23 21:01 dandavison

0.15.1 on macOS from homebrew ¯\_(ツ)_/¯

adamchainz avatar Jan 15 '23 08:01 adamchainz

Just had a thought this could be config related, but it still occurred when I emptied my git config file.

adamchainz avatar Feb 01 '23 09:02 adamchainz

This also happens to me at 0.17.0 (mac os 14.4.1). Any more info I can give you to reproduce or debug?

❯ echo "@@  @@\n" | RUST_BACKTRACE=full delta
thread 'main' panicked at src/features/line_numbers.rs:189:28:
index out of bounds: the len is 0 but the index is 0
stack backtrace:
   0:        0x100aa27d0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hc44f794219052ac6
   1:        0x100ad01cc - core::fmt::write::h3be8b1c9593e07b4
   2:        0x100ab9e28 - std::io::Write::write_fmt::h95a1e6c5537a96b5
   3:        0x100aa2628 - std::sys_common::backtrace::print::h7b809dd1f18ea674
   4:        0x100abbb00 - std::panicking::default_hook::{{closure}}::he339b0dd23f9052e
   5:        0x100abb880 - std::panicking::default_hook::he9ee42fa25c512f5
   6:        0x100abbf24 - std::panicking::rust_panic_with_hook::hd4ada112570991e5
   7:        0x100aa2db4 - std::panicking::begin_panic_handler::{{closure}}::h3f2b6a80c2b7e617
   8:        0x100aa2a04 - std::sys_common::backtrace::__rust_end_short_backtrace::hc0b94e2951df3fae
   9:        0x100abbcb4 - _rust_begin_unwind
  10:        0x100aef454 - core::panicking::panic_fmt::h0ed3af01737be6a9
  11:        0x100aef5ac - core::panicking::panic_bounds_check::hd8547d2ac1a831c3
  12:        0x1008b1cac - delta::features::line_numbers::LineNumbersData::initialize_hunk::ha540dfa9eecf285c
  13:        0x100868f88 - delta::handlers::hunk::<impl delta::delta::StateMachine>::handle_hunk_line::h3068406ab506a6e2
  14:        0x1008626d8 - delta::delta::delta::h2c1a49e16f3eea11
  15:        0x1007f9b9c - delta::main::h38c636a1694eb0dc
  16:        0x1007ee14c - std::sys_common::backtrace::__rust_begin_short_backtrace::h661dafcb61988808
  17:        0x10086066c - std::rt::lang_start::{{closure}}::hc3fb063017debeeb
  18:        0x100abbba0 - std::panicking::try::h3128bce4d588bc41
  19:        0x100aa4b58 - std::rt::lang_start_internal::h57a49fa80dd8b904
  20:        0x1007fba60 - _main

dennispaagman avatar May 23 '24 08:05 dennispaagman

I'm able to reproduce this on 0.17.0 after realizing that in my case, echo doesn't interpret backslash escapes by default 😅

Also to get this exact panic, I had to enable --line-numbers.

echo -e '@@  @@\n' | delta --line-numbers
#	 ^^ enables interpretation of backslash escapes

gives me the same panic as above

thread 'main' panicked at src/features/line_numbers.rs:189:28:
index out of bounds: the len is 0 but the index is 0
[...]

however,

echo -e '@@  @@\n' | delta

also panics:

thread 'main' panicked at src/handlers/hunk_header.rs:250:28:
index out of bounds: the len is 0 but the index is 18446744073709551615
stack backtrace:
   0: _rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::panicking::panic_bounds_check
   3: delta::handlers::hunk_header::write_line_of_code_with_optional_path_and_line_number
   4: delta::handlers::hunk::<impl delta::delta::StateMachine>::handle_hunk_line
   5: delta::delta::delta
   6: delta::run_app
   7: delta::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
with RUST_BACKTRACE=full
thread 'main' panicked at src/handlers/hunk_header.rs:250:28:
index out of bounds: the len is 0 but the index is 18446744073709551615
stack backtrace:
   0:        0x103ea5886 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h5a9170f5fa9c9196
   1:        0x103ebf5c3 - core::fmt::write::h66c46d4071227f75
   2:        0x103ea8418 - std::io::Write::write_fmt::h576278b35a26d786
   3:        0x103ea5679 - std::sys_common::backtrace::print::h11b96b76f3deab56
   4:        0x103ea04c5 - std::panicking::default_hook::{{closure}}::hfea0a17440cb1db1
   5:        0x103ea028f - std::panicking::default_hook::h3e23540ac34400d6
   6:        0x103ea0918 - std::panicking::rust_panic_with_hook::h57a36a01071288aa
   7:        0x103ea5e56 - std::panicking::begin_panic_handler::{{closure}}::h7719ce189a527545
   8:        0x103ea5ae9 - std::sys_common::backtrace::__rust_end_short_backtrace::h978f9bd304ed474f
   9:        0x103ea0672 - _rust_begin_unwind
  10:        0x103ee0d65 - core::panicking::panic_fmt::hd9616c81c532c5b3
  11:        0x103ee0f16 - core::panicking::panic_bounds_check::h1db59cdb31e714d4
  12:        0x103c1009d - delta::handlers::hunk_header::write_line_of_code_with_optional_path_and_line_number::hebe0d84240a3defe
  13:        0x103c42fa4 - delta::handlers::hunk::<impl delta::delta::StateMachine>::handle_hunk_line::h8b8e4cc8450dba0e
  14:        0x103c39d1c - delta::delta::delta::hca15eecbf525e509
  15:        0x103c01460 - delta::run_app::h00517eb25dd3027b
  16:        0x103bfe72d - delta::main::h5a36e82a6653c374
  17:        0x103c03aa6 - std::sys_common::backtrace::__rust_begin_short_backtrace::hd049ed607ac042fe
  18:        0x103be3561 - std::rt::lang_start::{{closure}}::h6837e39aa9f6b9d6
  19:        0x103ea0564 - std::panicking::try::hd88751af4d445ecd
  20:        0x103e9bade - std::rt::lang_start_internal::hdaaea2403d56144b
  21:        0x103c0345c - _main
  22:     0x7ff8165e141f - <unknown>

tautropfli avatar May 24 '24 16:05 tautropfli