Skip to content

Panic internal error: entered unreachable code: Bad BOM [0, 0] when reading file #537

@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

Encountered an invalid item size, either too big or too small to be valid
No format could be determined from the provided file
failed to fill whole buffer
failed to fill whole buffer

thread 'main' (2616714) panicked at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/items/language_frame.rs:59:10:
internal error: entered unreachable code: Bad BOM [0, 0]
stack backtrace:
   0: __rustc::rust_begin_unwind
             at /rustc/c8ca44c98eade864824a3c0a15fbdc1edb7f9dd4/library/std/src/panicking.rs:698:5
   1: core::panicking::panic_fmt
             at /rustc/c8ca44c98eade864824a3c0a15fbdc1edb7f9dd4/library/core/src/panicking.rs:75:14
   2: lofty::id3::v2::items::language_frame::LanguageFrame::parse
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/items/language_frame.rs:59:10
   3: lofty::id3::v2::items::language_frame::CommentFrame::parse
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/items/language_frame.rs:186:30
   4: lofty::id3::v2::frame::content::parse_content
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/frame/content.rs:33:13
   5: lofty::id3::v2::frame::read::parse_frame
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/frame/read.rs:258:8
   6: lofty::id3::v2::frame::read::ParsedFrame::read
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/frame/read.rs:203:12
   7: lofty::id3::v2::read::read_all_frames_into_tag
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/read.rs:146:9
   8: lofty::id3::v2::read::parse_id3v2
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/id3/v2/read.rs:38:9
   9: lofty::mpeg::read::read_from
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/mpeg/read.rs:47:18
  10: <lofty::mpeg::MpegFile as lofty::file::audio_file::AudioFile>::read_from
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/mpeg/mod.rs:17:10
  11: lofty::probe::Probe<R>::read
             at /home/runner/.cargo/git/checkouts/lofty-rs-fdd1bd466a957cbb/aa58485/lofty/src/probe.rs:472:23
  12: lofty::check_file
             at ./src/crates/lofty/src/main.rs:42:62
  13: lofty::main
             at ./src/crates/lofty/src/main.rs:26:9
  14: core::ops::function::FnOnce::call_once
             at /home/runner/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:253:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

##### Automatic Fuzzer note, output status "None", output signal "Some(6)"

Expected behavior

No response

Assets

compressed.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions