From 978ef6945aaff62d21ff5e369d75c326d796ee92 Mon Sep 17 00:00:00 2001 From: Serial <69764315+Serial-ATA@users.noreply.github.com> Date: Tue, 12 Aug 2025 06:48:35 -0400 Subject: [PATCH] ID3v2: Fix panic on empty UTF-16 strings with no BOM --- lofty/src/id3/v2/items/language_frame.rs | 4 ++-- lofty/src/id3/v2/items/sync_text.rs | 3 +-- ..._1362730390282399020432565_minimized_242.mp3 | Bin 0 -> 22278 bytes lofty/tests/fuzz/mpegfile_read_from.rs | 9 +++++++++ 4 files changed, 12 insertions(+), 4 deletions(-) create mode 100755 lofty/tests/fuzz/assets/mpegfile_read_from/00. Dzienniki Gwiazdowe_IDX_4_RAND_1362730390282399020432565_minimized_242.mp3 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 0000000000000000000000000000000000000000..8dbec31357980643adb507f9a585b79979d90ab3 GIT binary patch literal 22278 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"mpegfile_read_from/oom-f8730cbfa5682ab12343ccb70de9b71a061ef4d0");