typst / biblatex

A Rust crate for parsing and writing BibTeX and BibLaTeX files.
Apache License 2.0
120 stars 15 forks source link

Panic when getting authors from entry #24

Closed bamonroe closed 1 year ago

bamonroe commented 1 year ago

When creating an entry with an author, the call to "get" the author results in a panic. See the below MWE and stacktrace. Expected behavior is that I get a Result<Vec<Person>, RetrievalError>. Please let me know if I've made a mistake or if you need more information. Thanks a bunch!

Cargo version: cargo 1.64.0 (387270bc7 2022-09-16) OS: Arch Linux Kernel: 5.19.11-arch1-1

use biblatex::{
    Entry,
    EntryType,
    Person,
};

fn main() {
    let mut e = Entry::new("Test123".to_owned(), EntryType::Article);
    let v = vec![
        Person {
            name: "Brian Albert".to_string(),
            given_name: "Monroe".to_string(),
            prefix: "".to_string(),
            suffix: "".to_string(),
        },
    ];
    e.set_author(v);
    // Prints fine, shows the author field
    println!("{:?}", e);
    // Works
    println!("{:?}", e.get("author"));
    // Panics
    println!("{:?}", e.author());
}

And the following stacktrace:

Entry { key: "Test123", entry_type: Article, fields: {"author": [Normal("Brian Albert, Monroe")]} }
thread 'main' panicked at 'attempt to add with overflow', /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/chunk.rs:319:19
stack backtrace:
   0:     0x55c840c8176d - std::backtrace_rs::backtrace::libunwind::trace::h9135f25bc195152c
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x55c840c8176d - std::backtrace_rs::backtrace::trace_unsynchronized::h015ee85be510df51
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x55c840c8176d - std::sys_common::backtrace::_print_fmt::h5fad03caa9652a2c
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:66:5
   3:     0x55c840c8176d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h2b42ca28d244e5c7
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:45:22
   4:     0x55c840c9c99c - core::fmt::write::h401e827d053130ed
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/fmt/mod.rs:1198:17
   5:     0x55c840c7f941 - std::io::Write::write_fmt::hffec93268f5cde32
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/io/mod.rs:1672:15
   6:     0x55c840c82e45 - std::sys_common::backtrace::_print::h180c4c706ee1d3fb
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:48:5
   7:     0x55c840c82e45 - std::sys_common::backtrace::print::hd0c35d18765761c9
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:35:9
   8:     0x55c840c82e45 - std::panicking::default_hook::{{closure}}::h1f023310983bc730
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:295:22
   9:     0x55c840c82b61 - std::panicking::default_hook::h188fec3334afd5be
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:314:9
  10:     0x55c840c833d6 - std::panicking::rust_panic_with_hook::hf26e9d4f97b40096
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:698:17
  11:     0x55c840c83289 - std::panicking::begin_panic_handler::{{closure}}::hfab912107608087a
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:586:13
  12:     0x55c840c81c64 - std::sys_common::backtrace::__rust_end_short_backtrace::h434b685ce8d9965b
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:138:18
  13:     0x55c840c82ff9 - rust_begin_unwind
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:584:5
  14:     0x55c840c38703 - core::panicking::panic_fmt::ha6dc7f2ab2479463
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/panicking.rs:142:14
  15:     0x55c840c385cd - core::panicking::panic::hb3ad04c589a0e3c8
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/panicking.rs:48:5
  16:     0x55c840c576f0 - biblatex::chunk::split_values::h4d52133d545a6007
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/chunk.rs:319:19
  17:     0x55c840c56e27 - biblatex::chunk::split_at_normal_char::h46c918bcbef07953
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/chunk.rs:280:28
  18:     0x55c840c4051c - biblatex::types::person::Person::parse::hc861f97c54e13198
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/types/person.rs:43:32
  19:     0x55c840c41f5d - biblatex::types::person::<impl biblatex::types::Type for alloc::vec::Vec<biblatex::types::person::Person>>::from_chunks::{{closure}}::h0a64543c3d982ca1
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/types/person.rs:221:30
  20:     0x55c840c596ae - core::iter::adapters::map::map_fold::{{closure}}::h2f6fd505fd85c775
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/iter/adapters/map.rs:84:28
  21:     0x55c840c4ebcb - core::iter::traits::iterator::Iterator::fold::h1045c3e0572ae2d7
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/iter/traits/iterator.rs:2414:21
  22:     0x55c840c57fa8 - <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold::h588616f25e1170a2
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/iter/adapters/map.rs:124:9
  23:     0x55c840c592de - core::iter::traits::iterator::Iterator::for_each::h9386ffc17baeb57d
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/iter/traits/iterator.rs:831:9
  24:     0x55c840c4b325 - <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend::h0f1bdd838ea454c0
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/alloc/src/vec/spec_extend.rs:40:17
  25:     0x55c840c48da8 - <alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter::hcbd80a2ac9be7ddd
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/alloc/src/vec/spec_from_iter_nested.rs:62:9
  26:     0x55c840c4a2f3 - alloc::vec::in_place_collect::<impl alloc::vec::spec_from_iter::SpecFromIter<T,I> for alloc::vec::Vec<T>>::from_iter::h0df5cdbba0401372
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/alloc/src/vec/in_place_collect.rs:164:20
  27:     0x55c840c4b131 - <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter::hea1d7551e67b6486
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/alloc/src/vec/mod.rs:2648:9
  28:     0x55c840c59199 - core::iter::traits::iterator::Iterator::collect::h054887cac5c43957
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/iter/traits/iterator.rs:1836:9
  29:     0x55c840c4b828 - biblatex::types::person::<impl biblatex::types::Type for alloc::vec::Vec<biblatex::types::person::Person>>::from_chunks::hc2e9baf94cea8134
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/types/person.rs:219:12
  30:     0x55c840c3ae1b - <[biblatex::Spanned<biblatex::chunk::Chunk>] as biblatex::chunk::ChunksExt>::parse::haa020cfb3ca8d571
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/chunk.rs:98:9
  31:     0x55c840c3b7ac - biblatex::Entry::author::hd1e0e159f9f62231
                               at /home/bam/.cargo/registry/src/github.com-1ecc6299db9ec823/biblatex-0.6.2/src/macros.rs:6:17
  32:     0x55c840c3982c - bibtest::main::h4e73a55957b7c62d
                               at /tmp/bibtest/src/main.rs:23:19
  33:     0x55c840c39efb - core::ops::function::FnOnce::call_once::h11e9d1b62a55ac4f
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5
  34:     0x55c840c38eee - std::sys_common::backtrace::__rust_begin_short_backtrace::h02ae98d2d10c74e7
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:122:18
  35:     0x55c840c3a441 - std::rt::lang_start::{{closure}}::h6ddf68b8bf01581f
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:145:18
  36:     0x55c840c7cc8e - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hcdfee62722e5e4b8
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:280:13
  37:     0x55c840c7cc8e - std::panicking::try::do_call::h84ca51609826746f
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:492:40
  38:     0x55c840c7cc8e - std::panicking::try::hd58075e533b8e0cb
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:456:19
  39:     0x55c840c7cc8e - std::panic::catch_unwind::h1ebac24d83cb6ce2
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panic.rs:137:14
  40:     0x55c840c7cc8e - std::rt::lang_start_internal::{{closure}}::h0145388a1edd1640
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:128:48
  41:     0x55c840c7cc8e - std::panicking::try::do_call::h7630182e534a0a32
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:492:40
  42:     0x55c840c7cc8e - std::panicking::try::h05b6544f0c6331dc
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:456:19
  43:     0x55c840c7cc8e - std::panic::catch_unwind::h77b2ba8fd3309f34
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panic.rs:137:14
  44:     0x55c840c7cc8e - std::rt::lang_start_internal::h6612c8a7a6861b8b
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:128:20
  45:     0x55c840c3a410 - std::rt::lang_start::h89e20cedb11bae07
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:144:17
  46:     0x55c840c3991c - main
  47:     0x7f61df9fc290 - <unknown>
  48:     0x7f61df9fc34a - __libc_start_main
  49:     0x55c840c38995 - _start
                               at /build/glibc/src/glibc/csu/../sysdeps/x86_64/start.S:115
  50:                0x0 - <unknown>
bamonroe commented 1 year ago

It appears to work fine when compiling with --release but not with --debug

reknih commented 1 year ago

Thank you for reporting this bug!