diff --git a/lofty/src/id3/v2/items/language_frame.rs b/lofty/src/id3/v2/items/language_frame.rs index 74fd43dbe..22c283621 100644 --- a/lofty/src/id3/v2/items/language_frame.rs +++ b/lofty/src/id3/v2/items/language_frame.rs @@ -2,6 +2,7 @@ use crate::error::{Id3v2Error, Id3v2ErrorKind, Result}; use crate::id3::v2::frame::content::verify_encoding; use crate::id3::v2::header::Id3v2Version; use crate::id3::v2::{FrameFlags, FrameHeader, FrameId}; +use crate::macros::err; use crate::tag::items::Lang; use crate::util::text::{ DecodeTextResult, TextDecodeOptions, TextEncoding, decode_text, encode_text, @@ -55,8 +56,7 @@ impl LanguageFrame { endianness = match bom { [0xFF, 0xFE] => u16::from_le_bytes, [0xFE, 0xFF] => u16::from_be_bytes, - // The BOM has to be valid for `decode_text` to succeed - _ => unreachable!("Bad BOM {bom:?}"), + _ => err!(TextDecode("UTF-16 string missing a BOM")), }; } diff --git a/lofty/src/id3/v2/items/sync_text.rs b/lofty/src/id3/v2/items/sync_text.rs index bdf911fa0..af028bd13 100644 --- a/lofty/src/id3/v2/items/sync_text.rs +++ b/lofty/src/id3/v2/items/sync_text.rs @@ -166,8 +166,7 @@ impl SynchronizedTextFrame<'_> { endianness = match bom { [0xFF, 0xFE] => u16::from_le_bytes, [0xFE, 0xFF] => u16::from_be_bytes, - // Since the description was already read, we can assume the BOM was valid - _ => unreachable!("Bad BOM {bom:?}"), + _ => err!(TextDecode("UTF-16 string missing a BOM")), }; } diff --git a/lofty/tests/fuzz/assets/mpegfile_read_from/00. Dzienniki Gwiazdowe_IDX_4_RAND_1362730390282399020432565_minimized_242.mp3 b/lofty/tests/fuzz/assets/mpegfile_read_from/00. Dzienniki Gwiazdowe_IDX_4_RAND_1362730390282399020432565_minimized_242.mp3 new file mode 100755 index 000000000..8dbec3135 Binary files /dev/null and b/lofty/tests/fuzz/assets/mpegfile_read_from/00. Dzienniki Gwiazdowe_IDX_4_RAND_1362730390282399020432565_minimized_242.mp3 differ diff --git a/lofty/tests/fuzz/mpegfile_read_from.rs b/lofty/tests/fuzz/mpegfile_read_from.rs index 2b78ebb95..c29f840ca 100644 --- a/lofty/tests/fuzz/mpegfile_read_from.rs +++ b/lofty/tests/fuzz/mpegfile_read_from.rs @@ -40,6 +40,15 @@ fn crash5() { let _ = MpegFile::read_from(&mut reader, ParseOptions::new()); } +#[test_log::test] +fn crash6() { + let mut reader = get_reader( + "mpegfile_read_from/00. Dzienniki \ + Gwiazdowe_IDX_4_RAND_1362730390282399020432565_minimized_242.mp3", + ); + let _ = MpegFile::read_from(&mut reader, ParseOptions::new()); +} + #[test_log::test] fn oom1() { oom_test::("mpegfile_read_from/oom-f8730cbfa5682ab12343ccb70de9b71a061ef4d0");