]> granicus.if.org Git - taglib/commitdiff
Move the sanity check before the unknown frame stuff. As the code currently
authorScott Wheeler <wheeler@kde.org>
Mon, 18 Oct 2004 15:31:12 +0000 (15:31 +0000)
committerScott Wheeler <wheeler@kde.org>
Mon, 18 Oct 2004 15:31:12 +0000 (15:31 +0000)
is if a bogus frame is hit it may try to parse it as an UnknownFrame rather
than just discarding it.

CCMAIL:Espen Tveit <espen.tveit@gmail.com>

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

mpeg/id3v2/id3v2framefactory.cpp

index 858e46372a8bddeb5f7b2443a7b299a405682b4c..88343c2bc2549d2ba653629cca65aec486f9df17 100644 (file)
@@ -67,6 +67,22 @@ Frame *FrameFactory::createFrame(const ByteVector &data, bool synchSafeInts) con
 Frame *FrameFactory::createFrame(const ByteVector &data, uint version) const
 {
   Frame::Header *header = new Frame::Header(data, version);
+  ByteVector frameID = header->frameID();
+
+  // A quick sanity check -- make sure that the frameID is 4 uppercase Latin1
+  // characters.  Also make sure that there is data in the frame.
+
+  if(!frameID.size() == (version < 3 ? 3 : 4) || header->frameSize() <= 0) {
+    delete header;
+    return 0;
+  }
+
+  for(ByteVector::ConstIterator it = frameID.begin(); it != frameID.end(); it++) {
+    if( (*it < 'A' || *it > 'Z') && (*it < '1' || *it > '9') ) {
+      delete header;
+      return 0;
+    }
+  }
 
   // TagLib doesn't mess with encrypted frames, so just treat them
   // as unknown frames.
@@ -82,21 +98,6 @@ Frame *FrameFactory::createFrame(const ByteVector &data, uint version) const
     return new UnknownFrame(data, header);
   }
 
-  TagLib::ByteVector frameID = header->frameID();
-
-  // A quick sanity check -- make sure that the frameID is 4 uppercase Latin1
-  // characters.  Also make sure that there is data in the frame.
-
-  if(!frameID.size() == (version < 3 ? 3 : 4) || header->frameSize() <= 0)
-    return 0;
-
-  for(ByteVector::ConstIterator it = frameID.begin(); it != frameID.end(); it++) {
-    if( (*it < 'A' || *it > 'Z') && (*it < '1' || *it > '9') ) {
-      delete header;
-      return 0;
-    }
-  }
-
   if(!updateFrame(header)) {
     delete header;
     return 0;