Skip to content

thread 'main' panicked at 'Should not occur as multihash is known to be valid' #70

@mrd0ll4r

Description

@mrd0ll4r

Hey, I'm processing a large number of CIDs and stumbled upon this:

thread 'main' panicked at 'Should not occur as multihash is known to be valid', <::std::macros::panic macros>:2:4
stack backtrace:
   0:     0x555f14b962e4 - backtrace::backtrace::libunwind::trace::h5d52ba5f20882f09
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.44/src/backtrace/libunwind.rs:86
   1:     0x555f14b962e4 - backtrace::backtrace::trace_unsynchronized::hceee092869668a74
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.44/src/backtrace/mod.rs:66
   2:     0x555f14b962e4 - std::sys_common::backtrace::_print_fmt::ha312c2904605e4d5
                               at src/libstd/sys_common/backtrace.rs:78
   3:     0x555f14b962e4 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h5b9981092140b727
                               at src/libstd/sys_common/backtrace.rs:59
   4:     0x555f14baf9dc - core::fmt::write::h5f6d7d8de88b4173
                               at src/libcore/fmt/mod.rs:1063
   5:     0x555f14b945d3 - std::io::Write::write_fmt::h893169117de3cc15
                               at src/libstd/io/mod.rs:1426
   6:     0x555f14b988c5 - std::sys_common::backtrace::_print::h8ab61d4120f7a335
                               at src/libstd/sys_common/backtrace.rs:62
   7:     0x555f14b988c5 - std::sys_common::backtrace::print::h8aae19fbb153bf2a
                               at src/libstd/sys_common/backtrace.rs:49
   8:     0x555f14b988c5 - std::panicking::default_hook::{{closure}}::h1ee5b7d8b6f83429
                               at src/libstd/panicking.rs:204
   9:     0x555f14b98612 - std::panicking::default_hook::hd6c32c13403f9210
                               at src/libstd/panicking.rs:224
  10:     0x555f14b98ed2 - std::panicking::rust_panic_with_hook::h1f2449d529a25f22
                               at src/libstd/panicking.rs:470
  11:     0x555f14b619be - std::panicking::begin_panic::h6e070b70aef8705c
  12:     0x555f14b67439 - multihash::digests::MultihashRefGeneric<T>::algorithm::{{closure}}::h8663a4ee3426df84
  13:     0x555f14b67412 - multihash::digests::MultihashRefGeneric<T>::algorithm::h6d7c35d9ad6e23d5
  14:     0x555f14b648b0 - cid_decode::main::h988a09d69d682991
  15:     0x555f14b618e7 - std::rt::lang_start::{{closure}}::h4bae47bd4b36cdd9
  16:     0x555f14b98993 - std::rt::lang_start_internal::{{closure}}::h9a4aa16acf1cdc99
                               at src/libstd/rt.rs:52
  17:     0x555f14b98993 - std::panicking::try::do_call::h0b6fc9f6090c1e2b
                               at src/libstd/panicking.rs:303
  18:     0x555f14b9a757 - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:86
  19:     0x555f14b993ec - std::panicking::try::h9eaeeaa81242ec77
                               at src/libstd/panicking.rs:281
  20:     0x555f14b993ec - std::panic::catch_unwind::h07d504c1b691e8fb
                               at src/libstd/panic.rs:394
  21:     0x555f14b993ec - std::rt::lang_start_internal::hcea4e704875ab132
                               at src/libstd/rt.rs:51
  22:     0x555f14b653d2 - main
  23:     0x7fd73e079b97 - __libc_start_main
  24:     0x555f14b6008a - _start
  25:                0x0 - <unknown>

This is the CID that triggers it:

bagyacvrah3bmneoui6zp2dlksr2cgrnpd42ran62wgvz5eacaaaaaaaaaaaa

This is the program:

fn main() -> Result<()>{
    let mut rdr = BufReader::new(io::stdin());
    let mut s = String::new();

    let mut results:HashMap<_,usize> = HashMap::new();

    while let Ok(n) = rdr.read_line(&mut s) {
        if n == 0 {
            results.into_iter().for_each(|(k,v)| println!("{},{}",k,v));
            return Ok(())
        }

        debug!("working on {}",s.trim());

        let res = match do_single(s.trim()) {
            Err(_) => {"invalid".to_string()},
            Ok(m) => format!("{:?}:{:?}:{:?}:{:?}:{}",m.base,m.version,m.codec,m.hash,m.hash_len)
        };

        let entry = results.entry(res.clone()).or_default();
        *entry += 1;

        s.clear();
    }

    rdr.read_line(&mut s)?;

    Ok(())
}

#[derive(Debug,Clone)]
struct Metadata {
    base: multibase::Base,
    version: cid::Version,
    codec: cid::Codec,
    hash: multihash::Code,
    hash_len: usize,
}

fn do_single(s: &str) -> Result<Metadata> {
    let c = cid::Cid::try_from(s)?;
    if c.version() == cid::Version::V0 {
        return Ok(Metadata{
            base: multibase::Base::Base58Btc,
            version: c.version(),
            codec: c.codec(),
            hash: c.hash().algorithm(),
            hash_len: c.hash().digest().len()
        })
    }

    let (b, _) = multibase::decode(s.trim())?;

    Ok(Metadata{
        base: b,
        version: c.version(),
        codec: c.codec(),
        hash: c.hash().algorithm(),
        hash_len: c.hash().digest().len()
    })
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions