delta
delta copied to clipboard
🐛 index out of bounds crash with malformed patch
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
Thanks @adamchainz. What delta version is this? It doesn't seem to reproduce on master or 0.15.1 (MacOS).
0.15.1 on macOS from homebrew ¯\_(ツ)_/¯
Just had a thought this could be config related, but it still occurred when I emptied my git config file.
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
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>