Fix ID3v2 frame data length check for per-frame unsynchronised ID3v2.4 frames (#1385)

Frame::fieldData() (taglib/mpeg/id3v2/id3v2frame.cpp) discarded any
ID3v2.4 frame whose declared size (from the header) no longer matched
its actual buffer size after per-frame unsynchronisation was decoded by
FrameFactory::prepareFrameHeader(), silently emptying frames like
TIT2/TPE1/TALB. Clamp the declared length to what's actually available
instead of discarding the frame, only bailing out if the frame's data
offset itself doesn't fit.

Adds testUnsynchDecodeID3v24Frame() to tests/test_id3v2.cpp, covering a
frame with its own per-frame Unsynchronisation flag (as opposed to the
tag-wide flag already covered by testUnsynchDecode()), using new fixture
tests/data/unsynch24.id3.
This commit is contained in:
Thomas Bergwinkl
2026-08-01 07:53:53 +02:00
committed by GitHub
parent a100d0b2ec
commit 5530420d08
3 changed files with 15 additions and 2 deletions
Binary file not shown.