-
Notifications
You must be signed in to change notification settings - Fork 61
Closed
Description
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()
})
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels