From 618a939c56a815d5098d0b01c02e8c4d430af1b4 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Mon, 25 May 2015 02:41:27 +0900 Subject: [PATCH] Fix MPEG::File::firstFrameOffset() and lastFrameOffset(). (#190) --- taglib/mpeg/mpegfile.cpp | 4 ++-- tests/data/ape-id3v1.mp3 | Bin 0 -> 8419 bytes tests/data/ape-id3v2.mp3 | Bin 0 -> 9341 bytes tests/data/ape.mp3 | Bin 0 -> 8291 bytes tests/test_mpeg.cpp | 23 +++++++++++++++++++++++ 5 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tests/data/ape-id3v1.mp3 create mode 100644 tests/data/ape-id3v2.mp3 create mode 100644 tests/data/ape.mp3 diff --git a/taglib/mpeg/mpegfile.cpp b/taglib/mpeg/mpegfile.cpp index 0ac87d10..637dfa9b 100644 --- a/taglib/mpeg/mpegfile.cpp +++ b/taglib/mpeg/mpegfile.cpp @@ -433,7 +433,7 @@ long MPEG::File::firstFrameOffset() { long position = 0; - if(ID3v2Tag()) { + if(hasID3v2Tag()) { position = d->ID3v2Location + ID3v2Tag()->header()->completeTagSize(); // Skip duplicate ID3v2 tags. @@ -456,7 +456,7 @@ long MPEG::File::firstFrameOffset() long MPEG::File::lastFrameOffset() { - return previousFrameOffset(ID3v1Tag() ? d->ID3v1Location - 1 : length()); + return previousFrameOffset(hasID3v1Tag() ? d->ID3v1Location - 1 : length()); } bool MPEG::File::hasID3v1Tag() const diff --git a/tests/data/ape-id3v1.mp3 b/tests/data/ape-id3v1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a761d6ca6f027cce2856921f84ec65681565b4c5 GIT binary patch literal 8419 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 g_Q`M@ERUWh5hHq(~w=J0he= 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 u=QJ#a4?@ss@E7p^^MD`u