Skip to content

Panic is not a char boundary in src/id3/v2/read.rs #477

@qarmin

Description

@qarmin

Reproducer

I tried this code:

#![no_main] use libfuzzer_sys::{fuzz_target, Corpus}; use lofty::file::AudioFile; use lofty::file::{FileType, TaggedFileExt}; use lofty::probe::Probe; const ALL_FILE_TYPES: &[FileType] = &[ FileType::Aac, FileType::Aiff, FileType::Ape, FileType::Flac, FileType::Mpeg, FileType::Mp4, FileType::Mpc, FileType::Opus, FileType::Vorbis, FileType::Speex, FileType::Wav, FileType::WavPack, ]; fuzz_target!(|data: &[u8]| -> Corpus { let mut corpus = Corpus::Reject; for i in ALL_FILE_TYPES { let s = std::io::Cursor::new(data); let tagged_file = match Probe::with_file_type(s, *i).read() { Ok(t) => t, Err(_e) => { continue; } }; corpus = Corpus::Keep; tagged_file.properties(); tagged_file.tags(); tagged_file.primary_tag(); } corpus });

Summary

thread 'main' panicked at /home/rafal/.cargo/git/checkouts/lofty-rs-f5e48f8219b271cf/4a2bcf5/lofty/src/id3/v2/read.rs:90:45: byte index 2 is not a char boundary; it is inside 'à' (bytes 1..3) of `3àL` stack backtrace: 0: rust_begin_unwind at /rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/std/src/panicking.rs:662:5 1: core::panicking::panic_fmt at /rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/panicking.rs:74:14 2: core::str::slice_error_fail_rt 3: core::str::slice_error_fail at /rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/str/mod.rs:68:5 4: core::str::traits::<impl core::slice::index::SliceIndex<str> for core::ops::range::RangeTo<usize>>::index at /rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/str/traits.rs:470:21 5: core::str::traits::<impl core::ops::index::Index<I> for str>::index at /rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/str/traits.rs:60:15 6: lofty::id3::v2::read::construct_tdrc_from_v3 at /home/rafal/.cargo/git/checkouts/lofty-rs-f5e48f8219b271cf/4a2bcf5/lofty/src/id3/v2/read.rs:90:36 7: lofty::id3::v2::read::parse_id3v2 at /home/rafal/.cargo/git/checkouts/lofty-rs-f5e48f8219b271cf/4a2bcf5/lofty/src/id3/v2/read.rs:46:3 8: lofty::mpeg::read::read_from at /home/rafal/.cargo/git/checkouts/lofty-rs-f5e48f8219b271cf/4a2bcf5/lofty/src/mpeg/read.rs:47:18 9: <lofty::mpeg::MpegFile as lofty::file::audio_file::AudioFile>::read_from at /home/rafal/.cargo/git/checkouts/lofty-rs-f5e48f8219b271cf/4a2bcf5/lofty/src/mpeg/mod.rs:17:10 10: lofty::probe::Probe<R>::read at /home/rafal/.cargo/git/checkouts/lofty-rs-f5e48f8219b271cf/4a2bcf5/lofty/src/probe.rs:472:23 11: lofty::check_file at /home/rafal/Projekty/Rust/run_command_for_every_file/src/crates/lofty/src/main.rs:42:33 12: lofty::main at /home/rafal/Projekty/Rust/run_command_for_every_file/src/crates/lofty/src/main.rs:26:9 13: core::ops::function::FnOnce::call_once at /rustc/f6e511eec7342f59a25f7c0534f1dbea00d01b14/library/core/src/ops/function.rs:250:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. Aborted (core dumped) 

Expected behavior

No response

Assets

crash-b8f2fc10e2ab6c4e60c371aea3949871fc61a39b_minimized.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions