mirror of
https://github.com/taglib/taglib.git
synced 2026-08-27 12:47:01 -04:00
be424957dae963d9735933ae557e5cffee508fd5
The Xing header supplies both the frame count and the byte count as raw 32 bit values, and TagLib multiplies the frame count by the per-frame duration without checking the result. At MPEG 2.5 Layer III / 8 kHz a frame is 72 ms, so 2^32-1 declared frames puts the length at ~3.1e11 ms and the conversion to int is undefined: taglib/mpeg/mpegproperties.cpp:166:35: runtime error: 3.09238e+11 is outside the range of representable values of type 'int' The bitrate on the next line is reachable the other way round. One declared frame of MPEG 1 Layer I at 48 kHz is 8 ms, and the declared size is not the real file size, so a 1 KB file can claim 2^32-1 bytes: taglib/mpeg/mpegproperties.cpp:167:35: runtime error: 4.29497e+09 is outside the range of representable values of type 'int' The length computed on the non-Xing path has the same shape but is bounded by the real stream length rather than a declared count, so it needs a file of a couple of gigabytes rather than a crafted header. I have not built one; that guard is there for consistency, not on demonstrated evidence. Leave the field at its default rather than converting. Two reports before the change, none after. The 23 MPEG files in tests/data report identical channels, sample rate, bitrate and length before and after, and the suite runs 576 tests either way. Assisted-By: Claude Code (Claude Opus 5)
TagLib
TagLib Audio Metadata Library
TagLib is a library for reading and editing the metadata of several popular audio formats. Currently, it supports various metadata containers such as ID3v1, ID3v2 and Vorbis comments for MP3, MP4, AAC, Ogg, Opus, FLAC, Speex, APE, MPC, WavPack, WAV, AIFF, TrueAudio, Matroska, WebM, ASF, WMA, DSF, DFF and tracker (MOD, XM, S3M, IT) files.
TagLib is distributed under the GNU Lesser General Public License (LGPL) and Mozilla Public License (MPL). Essentially that means that it may be used in proprietary applications, but if changes are made to TagLib they must be contributed back to the project. Please review the licenses if you are considering using TagLib in your project.
Languages
C++
96.7%
CMake
2%
C
0.9%
Logos
0.4%