mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 21:20:26 -04:00
Fix off-by-one error in MP4::Tag when looking for free padding to use
git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@961160 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
parent
f1a16bcf0f
commit
94a402395b
@ -420,6 +420,8 @@ MP4::Tag::saveExisting(ByteVector &data, AtomList &path)
|
||||
|
||||
MP4::Atom *meta = path[path.size() - 2];
|
||||
AtomList::Iterator index = meta->children.find(ilst);
|
||||
|
||||
// check if there is an atom before 'ilst', and possibly use it as padding
|
||||
if(index != meta->children.begin()) {
|
||||
AtomList::Iterator prevIndex = index;
|
||||
prevIndex--;
|
||||
@ -429,9 +431,10 @@ MP4::Tag::saveExisting(ByteVector &data, AtomList &path)
|
||||
length += prev->length;
|
||||
}
|
||||
}
|
||||
if(index != meta->children.end()) {
|
||||
AtomList::Iterator nextIndex = index;
|
||||
nextIndex++;
|
||||
// check if there is an atom after 'ilst', and possibly use it as padding
|
||||
AtomList::Iterator nextIndex = index;
|
||||
nextIndex++;
|
||||
if(nextIndex != meta->children.end()) {
|
||||
MP4::Atom *next = *nextIndex;
|
||||
if(next->name == "free") {
|
||||
length += next->length;
|
||||
|
BIN
tests/data/ilst-is-last.m4a
Normal file
BIN
tests/data/ilst-is-last.m4a
Normal file
Binary file not shown.
@ -17,6 +17,7 @@ class TestMP4 : public CppUnit::TestFixture
|
||||
CPPUNIT_TEST(testProperties);
|
||||
CPPUNIT_TEST(testFreeForm);
|
||||
CPPUNIT_TEST(testUpdateStco);
|
||||
CPPUNIT_TEST(testSaveExisingWhenIlstIsLast);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
@ -98,6 +99,25 @@ public:
|
||||
deleteFile(filename);
|
||||
}
|
||||
|
||||
void testSaveExisingWhenIlstIsLast()
|
||||
{
|
||||
string filename = copyFile("ilst-is-last", ".m4a");
|
||||
|
||||
MP4::File *f = new MP4::File(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(String("82,164"), f->tag()->itemListMap()["----:com.apple.iTunes:replaygain_track_minmax"].toStringList()[0]);
|
||||
CPPUNIT_ASSERT_EQUAL(String("Pearl Jam"), f->tag()->artist());
|
||||
f->tag()->setComment("foo");
|
||||
f->save();
|
||||
delete f;
|
||||
|
||||
f = new MP4::File(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(String("82,164"), f->tag()->itemListMap()["----:com.apple.iTunes:replaygain_track_minmax"].toStringList()[0]);
|
||||
CPPUNIT_ASSERT_EQUAL(String("Pearl Jam"), f->tag()->artist());
|
||||
CPPUNIT_ASSERT_EQUAL(String("foo"), f->tag()->comment());
|
||||
|
||||
deleteFile(filename);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestMP4);
|
||||
|
Loading…
Reference in New Issue
Block a user