From: Tsuda Kageyu Date: Wed, 22 Oct 2014 23:14:10 +0000 (+0900) Subject: Avoid reading an entire ID3v2 tag when skipping it. X-Git-Tag: v1.10beta~140^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=73b9b9b58d5bfee2ea9baba62b4db5d92cb4b42f;p=taglib Avoid reading an entire ID3v2 tag when skipping it. --- diff --git a/taglib/mpeg/mpegfile.cpp b/taglib/mpeg/mpegfile.cpp index 5f953ccb..0ac87d10 100644 --- a/taglib/mpeg/mpegfile.cpp +++ b/taglib/mpeg/mpegfile.cpp @@ -434,18 +434,18 @@ long MPEG::File::firstFrameOffset() long position = 0; if(ID3v2Tag()) { + position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize(); // Skip duplicate ID3v2 tags. // Workaround for some faulty files that have duplicate ID3v2 tags. // Combination of EAC and LAME creates such files when configured incorrectly. - position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize(); - long location; while((location = findID3v2(position)) >= 0) { - ID3v2::Tag dupTag(this, location); - position = location + dupTag.header()->completeTagSize(); + seek(location); + const ID3v2::Header header(readBlock(ID3v2::Header::size())); + position = location + header.completeTagSize(); debug("MPEG::File::firstFrameOffset() - Duplicate ID3v2 tag found."); }