[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdesupport/taglib
From: Lukáš Lalinský <lalinsky () gmail ! com>
Date: 2010-04-15 20:22:21
Message-ID: 20100415202221.65102AC898 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1115275 by lalinsky:
Fix parsing of regular 32-bit integers in SynchData::toUInt()
BUG:231075
M +3 -1 NEWS
M +4 -8 taglib/mpeg/id3v2/id3v2synchdata.cpp
AM tests/data/compressed_id3_frame.mp3
M +14 -0 tests/test_id3v2.cpp
M +19 -0 tests/test_synchdata.cpp
--- trunk/kdesupport/taglib/NEWS #1115274:1115275
@@ -1,10 +1,12 @@
-TagLib 1.6.3 (Apr 13, 2010)
+TagLib 1.6.3 (Apr 15, 2010)
===========================
* Fixed definitions of the TAGLIB_WITH_MP4 and TAGLIB_WITH_ASF macros.
* Fixed upgrading of ID3v2.3 genre frame with ID3v1 code 0 (Blues).
* New method `int String::toInt(bool *ok)` which can return whether the
conversion to a number was successfull.
+ * Fixed parsing of incorrectly written lengths in ID3v2 (affects mainly
+ compressed frames). (BUG:231075)
TagLib 1.6.2 (Apr 9, 2010)
==========================
--- trunk/kdesupport/taglib/taglib/mpeg/id3v2/id3v2synchdata.cpp #1115274:1115275
@@ -46,14 +46,10 @@
}
if(notSynchSafe) {
- /*
- * Invalid data; assume this was created by some buggy software that just
- * put normal integers here rather than syncsafe ones, and try it that
- * way.
- */
- sum = 0;
- for(int i = 0; i <= last; i++)
- sum |= data[i] << ((last - i) * 8);
+ // Invalid data; assume this was created by some buggy software that just
+ // put normal integers here rather than syncsafe ones, and try it that
+ // way.
+ sum = (data.size() > 4) ? data.mid(0, 4).toUInt() : data.toUInt();
}
return sum;
--- trunk/kdesupport/taglib/tests/test_id3v2.cpp #1115274:1115275
@@ -61,6 +61,7 @@
CPPUNIT_TEST(testUpdateGenre24);
CPPUNIT_TEST(testUpdateDate22);
// CPPUNIT_TEST(testUpdateFullDate22); TODO TYE+TDA should be upgraded to TDRC together
+ CPPUNIT_TEST(testCompressedFrameWithBrokenLength);
CPPUNIT_TEST_SUITE_END();
public:
@@ -455,6 +456,19 @@
CPPUNIT_ASSERT_EQUAL(String("2010-04-03"), f.ID3v2Tag()->frameListMap()["TDRC"].front()->toString());
}
+ void testCompressedFrameWithBrokenLength()
+ {
+ MPEG::File f("data/compressed_id3_frame.mp3", false);
+ CPPUNIT_ASSERT(f.ID3v2Tag()->frameListMap().contains("APIC"));
+ ID3v2::AttachedPictureFrame *frame =
+ static_cast<TagLib::ID3v2::AttachedPictureFrame*>(f.ID3v2Tag()->frameListMap()["APIC"].front());
+ CPPUNIT_ASSERT(frame);
+ CPPUNIT_ASSERT_EQUAL(String("image/bmp"), frame->mimeType());
+ CPPUNIT_ASSERT_EQUAL(ID3v2::AttachedPictureFrame::Other, frame->type());
+ CPPUNIT_ASSERT_EQUAL(String(""), frame->description());
+ CPPUNIT_ASSERT_EQUAL(TagLib::uint(86414), frame->picture().size());
+ }
+
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestID3v2);
--- trunk/kdesupport/taglib/tests/test_synchdata.cpp #1115274:1115275
@@ -34,6 +34,8 @@
CPPUNIT_TEST(test1);
CPPUNIT_TEST(test2);
CPPUNIT_TEST(test3);
+ CPPUNIT_TEST(testToUIntBroken);
+ CPPUNIT_TEST(testToUIntBrokenAndTooLarge);
CPPUNIT_TEST(testDecode1);
CPPUNIT_TEST(testDecode2);
CPPUNIT_TEST_SUITE_END();
@@ -67,6 +69,23 @@
CPPUNIT_ASSERT_EQUAL(ID3v2::SynchData::fromUInt(129), v);
}
+ void testToUIntBroken()
+ {
+ char data[] = { 0, 0, 0, -1 };
+ char data2[] = { 0, 0, -1, -1 };
+
+ CPPUNIT_ASSERT_EQUAL(TagLib::uint(255), ID3v2::SynchData::toUInt(ByteVector(data, 4)));
+ CPPUNIT_ASSERT_EQUAL(TagLib::uint(65535), ID3v2::SynchData::toUInt(ByteVector(data2, 4)));
+ }
+
+ void testToUIntBrokenAndTooLarge()
+ {
+ char data[] = { 0, 0, 0, -1, 0 };
+ ByteVector v(data, 5);
+
+ CPPUNIT_ASSERT_EQUAL(TagLib::uint(255), ID3v2::SynchData::toUInt(v));
+ }
+
void testDecode1()
{
ByteVector a("\xff\x00\x00", 3);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic