Narigo/keepass-diff

Crash on Linux

Opened this issue · 2 comments

Checked with many files, always crashes. Files are valid, KeepasXC opens them.

I'm not looking for a solution for this issue. I use my own app for diffing, I created it when faced with this issue ~6 months ago. So, this issue is quite old, and nothing changed.

Details:
build from master (compiled with RUSTFLAGS="-C target-cpu=native" cargo install keepass-diff)
Arch Linux, x86_64

Stacktrace:

Password for both files: 
thread 'main' panicked at 'range end index 8 out of range for slice of length 0', /home/aleksey/.cargo/registry/src/github.com-1ecc6299db9ec823/keepass-0.4.10/src/xml_parse.rs:32:32
stack backtrace:
   0:     0x5574c9ee221c - std::backtrace_rs::backtrace::libunwind::trace::h09f7e4e089375279
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x5574c9ee221c - std::backtrace_rs::backtrace::trace_unsynchronized::h1ec96f1c7087094e
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x5574c9ee221c - std::sys_common::backtrace::_print_fmt::h317b71fc9a5cf964
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:67:5
   3:     0x5574c9ee221c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he3555b48e7dfe7f0
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:46:22
   4:     0x5574c9eff95c - core::fmt::write::h513b07ca38f4fb1b
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/fmt/mod.rs:1149:17
   5:     0x5574c9edf225 - std::io::Write::write_fmt::haf8c932b52111354
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/io/mod.rs:1697:15
   6:     0x5574c9ee3df0 - std::sys_common::backtrace::_print::h195c38364780a303
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:49:5
   7:     0x5574c9ee3df0 - std::sys_common::backtrace::print::hc09dfdea923b6730
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:36:9
   8:     0x5574c9ee3df0 - std::panicking::default_hook::{{closure}}::hb2e38ec0d91046a3
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:211:50
   9:     0x5574c9ee39a5 - std::panicking::default_hook::h60284635b0ad54a8
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:228:9
  10:     0x5574c9ee44a4 - std::panicking::rust_panic_with_hook::ha677a669fb275654
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:606:17
  11:     0x5574c9ee3f80 - std::panicking::begin_panic_handler::{{closure}}::h976246fb95d93c31
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:502:13
  12:     0x5574c9ee26c4 - std::sys_common::backtrace::__rust_end_short_backtrace::h38077ee5b7b9f99a
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:139:18
  13:     0x5574c9ee3ee9 - rust_begin_unwind
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:498:5
  14:     0x5574c9b58111 - core::panicking::panic_fmt::h35f3a62252ba0fd2
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/panicking.rs:107:14
  15:     0x5574c9b582a2 - core::slice::index::slice_end_index_len_fail::h735e748f7023a8c4
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/slice/index.rs:41:5
  16:     0x5574c9cb192e - <core::ops::range::Range<usize> as core::slice::index::SliceIndex<[T]>>::index::h6e4fbd32dea6032d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/slice/index.rs:240:13
  17:     0x5574c9c6c5e8 - core::slice::index::<impl core::ops::index::Index<I> for [T]>::index::hc0027a9856577b05
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/slice/index.rs:15:9
  18:     0x5574c9bab658 - <alloc::vec::Vec<T,A> as core::ops::index::Index<I>>::index::ha76f9baaaf8aa8f7
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/alloc/src/vec/mod.rs:2528:9
  19:     0x5574c9bcf5bf - keepass::xml_parse::parse_xml_timestamp::hc0cfca25d9ab36e1
                               at /home/aleksey/.cargo/registry/src/github.com-1ecc6299db9ec823/keepass-0.4.10/src/xml_parse.rs:32:32
  20:     0x5574c9bd1672 - keepass::xml_parse::parse_xml_block::h7254e887919d082b
                               at /home/aleksey/.cargo/registry/src/github.com-1ecc6299db9ec823/keepass-0.4.10/src/xml_parse.rs:175:39
  21:     0x5574c9bc5de6 - keepass::parse::kdbx3::parse::he5db14e97e738b9d
                               at /home/aleksey/.cargo/registry/src/github.com-1ecc6299db9ec823/keepass-0.4.10/src/parse/kdbx3.rs:183:27
  22:     0x5574c9bd83d6 - keepass::db::Database::open::h732c8b10d8c0621e
                               at /home/aleksey/.cargo/registry/src/github.com-1ecc6299db9ec823/keepass-0.4.10/src/db.rs:71:17
  23:     0x5574c9b64a19 - keepass_diff::kdbx_to_group::{{closure}}::h5ce501cd3deec7a2
                               at /home/aleksey/tmp/keepass-diff/src/main.rs:154:22
  24:     0x5574c9b7eca0 - core::result::Result<T,E>::and_then::h9a4c0422c4cfd937
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/result.rs:966:22
  25:     0x5574c9b618d6 - keepass_diff::kdbx_to_group::ha3618eaa6b54780a
                               at /home/aleksey/tmp/keepass-diff/src/main.rs:151:5
  26:     0x5574c9b61356 - keepass_diff::main::h5de6d794e6735a44
                               at /home/aleksey/tmp/keepass-diff/src/main.rs:118:24
  27:     0x5574c9b88782 - core::ops::function::FnOnce::call_once::ha33f9c23999d5d3d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ops/function.rs:227:5
  28:     0x5574c9b7094a - std::sys_common::backtrace::__rust_begin_short_backtrace::h4a35e03ccebcbf39
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/sys_common/backtrace.rs:123:18
  29:     0x5574c9b7d026 - std::rt::lang_start::{{closure}}::ha969a574c650967d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:145:18
  30:     0x5574c9ee1eab - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h7e688d7cdfeb7e00
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/core/src/ops/function.rs:259:13
  31:     0x5574c9ee1eab - std::panicking::try::do_call::h4be824d2350b44c9
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:406:40
  32:     0x5574c9ee1eab - std::panicking::try::h0a6fc7affbe5088d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:370:19
  33:     0x5574c9ee1eab - std::panic::catch_unwind::h22c320f732ec805e
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panic.rs:133:14
  34:     0x5574c9ee1eab - std::rt::lang_start_internal::{{closure}}::hd38309c108fe679d
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:128:48
  35:     0x5574c9ee1eab - std::panicking::try::do_call::h8fcaf501f097a28e
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:406:40
  36:     0x5574c9ee1eab - std::panicking::try::h20e906825f98acc1
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panicking.rs:370:19
  37:     0x5574c9ee1eab - std::panic::catch_unwind::h8c5234dc632124ef
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/panic.rs:133:14
  38:     0x5574c9ee1eab - std::rt::lang_start_internal::hc4dd8cd3ec4518c2
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:128:20
  39:     0x5574c9b7cff0 - std::rt::lang_start::h7359dd7065cd00d9
                               at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b/library/std/src/rt.rs:144:17
  40:     0x5574c9b6448c - main
  41:     0x7fc774b4d850 - <unknown>
  42:     0x7fc774b4d90a - __libc_start_main
  43:     0x5574c9b58875 - _start
  44:                0x0 - <unknown>
Narigo commented

Hi @aivanovski, thanks for the report - do you have a test file for me to be able to reproduce this?

While upgrading to the most recent keepass-rs version (0.6.1), I added two test files that contain empty group names. Those fail in the latest version, maybe empty group names fail in the version currently used here as well (0.4.10)?

Hi @Narigo, I'm not sure the stacktrace above was produced from this file, but at least it produces crash.
Password: abc123
test.kdbx.zip

It should produce this error:

thread 'main' panicked at 'Error opening database A: IO { e: Custom { kind: InvalidInput, error: "corrupt deflate stream" } }', src/main.rs:117:18

I also have database with my personal password, that I can't share. It also produces crash, but it differs:

thread 'main' panicked at 'Error opening database A: DatabaseIntegrity { e: InvalidOuterHeaderEntry { entry_type: 12 } }', src/main.rs:117:18