]> granicus.if.org Git - taglib/commitdiff
Don't save ID3v2.2 frames.
authorLukáš Lalinský <lalinsky@gmail.com>
Sat, 11 Jul 2009 14:43:58 +0000 (14:43 +0000)
committerLukáš Lalinský <lalinsky@gmail.com>
Sat, 11 Jul 2009 14:43:58 +0000 (14:43 +0000)
Patch by Marc Halbruegge
BUG:176373

git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@994842 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

taglib/mpeg/id3v2/id3v2tag.cpp
tests/test_id3v2.cpp

index c7eb6d619d412cc419c1b3f7b7f8604b795f5fba..b13dcc39d85a01a47c1db323d1aba3b8e24abc52 100644 (file)
@@ -352,6 +352,11 @@ ByteVector ID3v2::Tag::render() const
   // Loop through the frames rendering them and adding them to the tagData.
 
   for(FrameList::Iterator it = d->frameList.begin(); it != d->frameList.end(); it++) {
+    if ((*it)->header()->frameID().size() != 4) {
+      debug("A frame of unsupported or unknown type \'"
+          + String((*it)->header()->frameID()) + "\' has been discarded");
+      continue;
+    }
     if(!(*it)->header()->tagAlterPreservation())
       tagData.append((*it)->render());
   }
index 5aeaa8611a5820c9067138e3150b6d4500f1d239..0a105069970c2bc28af6223dc494d6ea71138540 100644 (file)
@@ -39,6 +39,7 @@ class TestID3v2 : public CppUnit::TestFixture
   CPPUNIT_TEST(testParseAPIC);
   CPPUNIT_TEST(testParseAPIC_UTF16_BOM);
   CPPUNIT_TEST(testParseAPICv22);
+  CPPUNIT_TEST(testDontRender22);
   CPPUNIT_TEST(testParseGEOB);
   CPPUNIT_TEST(testPOPMtoString);
   CPPUNIT_TEST(testParsePOPM);
@@ -152,6 +153,26 @@ public:
     CPPUNIT_ASSERT_EQUAL(String("d"), frame->description());
   }
 
+  void testDontRender22()
+  {
+    ID3v2::FrameFactory *factory = ID3v2::FrameFactory::instance();
+    ByteVector data = ByteVector("FOO"
+                                 "\x00\x00\x08"
+                                 "\x00"
+                                 "JPG"
+                                 "\x01"
+                                 "d\x00"
+                                 "\x00", 18);
+    ID3v2::AttachedPictureFrame *frame =
+        static_cast<TagLib::ID3v2::AttachedPictureFrame*>(factory->createFrame(data, TagLib::uint(2)));
+
+    CPPUNIT_ASSERT(frame);
+
+    ID3v2::Tag tag;
+    tag.addFrame(frame);
+    CPPUNIT_ASSERT_EQUAL(TagLib::uint(1034), tag.render().size());
+  }
+
   // http://bugs.kde.org/show_bug.cgi?id=151078
   void testParseGEOB()
   {