pub fn parse_audio_file(file_handler: File) -> Result<(), Error> {
let mss = MediaSourceStream::new(Box::new(file_handler), Default::default());
let probed = match symphonia::default::get_probe().format(
&Default::default(),
mss,
&Default::default(),
&Default::default(),
) {
Ok(t) => t,
Err(_) => {
return Err(Error::Unsupported(
"probe info not available/file not recognized",
))
}
};
let mut format = probed.format;
let track = match format
.tracks()
.iter()
.find(|t| t.codec_params.codec != CODEC_TYPE_NULL)
{
Some(k) => k,
None => return Err(Error::Unsupported("not supported audio track")),
};
let mut decoder =
match symphonia::default::get_codecs().make(&track.codec_params, &Default::default()) {
Ok(k) => k,
Err(_) => return Err(Error::Unsupported("not supported codec")),
};
loop {
let packet = match format.next_packet() {
Ok(packet) => packet,
Err(Error::ResetRequired) => {
return Err(Error::ResetRequired);
}
Err(err) => {
if let IoError(ref er) = err {
// Catch eof, not sure how to do it properly
if er.kind() == io::ErrorKind::UnexpectedEof {
return Ok(());
}
}
return Err(err);
}
};
decoder.decode(&packet)?;
}
}
thread 'main' panicked at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:91:18:
attempt to subtract with overflow
stack backtrace:
0: rust_begin_unwind
at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/std/src/panicking.rs:652:5
1: core::panicking::panic_fmt
at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/panicking.rs:72:14
2: core::panicking::panic_const::panic_const_sub_overflow
at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/panicking.rs:180:21
3: symphonia_format_mkv::ebml::read_vint
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:91:18
4: symphonia_format_mkv::ebml::read_size
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:57:23
5: symphonia_format_mkv::ebml::ElementHeader::read
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:196:20
6: symphonia_format_mkv::ebml::ElementIterator<R>::read_header_no_consume
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:320:35
7: symphonia_format_mkv::ebml::ElementIterator<R>::read_header
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:280:22
8: <symphonia_format_mkv::segment::EbmlHeaderElement as symphonia_format_mkv::ebml::Element>::read
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/segment.rs:231:34
9: symphonia_format_mkv::ebml::ElementIterator<R>::read_element_data
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:350:23
10: <symphonia_format_mkv::ebml::EbmlElement as symphonia_format_mkv::ebml::Element>::read
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:221:27
11: symphonia_format_mkv::ebml::ElementIterator<R>::read_element_data
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:350:23
12: symphonia_format_mkv::ebml::ElementIterator<R>::read_element
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/ebml.rs:337:9
13: <symphonia_format_mkv::demuxer::MkvReader as symphonia_core::formats::FormatReader>::try_new
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-format-mkv-0.5.4/src/demuxer.rs:320:20
14: <symphonia_format_mkv::demuxer::MkvReader as symphonia_core::probe::QueryDescriptor>::query::{{closure}}
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-core-0.5.4/src/probe.rs:360:65
15: core::ops::function::FnOnce::call_once
at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/ops/function.rs:250:5
16: symphonia_core::probe::Probe::format
at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/symphonia-core-0.5.4/src/probe.rs:326:34
17: symphonia::parse_audio_file
at ./src/crates/symphonia/src/main.rs:43:24
18: symphonia::check_file
at ./src/crates/symphonia/src/main.rs:37:13
19: symphonia::main
at ./src/crates/symphonia/src/main.rs:24:9
20: core::ops::function::FnOnce::call_once
at /rustc/129f3b9964af4d4a709d1383930ade12dfe7c081/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
timeout: the monitored command dumped core
##### Automatic Fuzzer note, output status "None", output signal "Some(6)"
Code
compressed.zip