]> granicus.if.org Git - taglib/commitdiff
Add a check for faulty Ogg/FLAC files.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 1 Jan 2015 15:10:51 +0000 (00:10 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Thu, 1 Jan 2015 15:10:51 +0000 (00:10 +0900)
taglib/ogg/flac/oggflacfile.cpp

index 0c1d61b65b1d76d83259f055a44dd68924615e81..1258e7051a53b79491f75ca52c2bd6c086e24336 100644 (file)
@@ -211,30 +211,26 @@ void Ogg::FLAC::File::scan()
   long overhead = 0;
 
   ByteVector metadataHeader = packet(ipacket);
-  if(metadataHeader.isNull())
+  if(metadataHeader.isEmpty())
     return;
 
-  ByteVector header;
-
-  if (!metadataHeader.startsWith("fLaC"))  {
+  if(!metadataHeader.startsWith("fLaC"))  {
     // FLAC 1.1.2+
-    if (metadataHeader.mid(1,4) != "FLAC") return;
+    if(metadataHeader.mid(1, 4) != "FLAC")
+      return;
 
-    if (metadataHeader[5] != 1) return; // not version 1
+    if(metadataHeader[5] != 1)
+      return; // not version 1
 
     metadataHeader = metadataHeader.mid(13);
   }
   else {
     // FLAC 1.1.0 & 1.1.1
     metadataHeader = packet(++ipacket);
-
-    if(metadataHeader.isNull())
-      return;
-
   }
 
-  header = metadataHeader.mid(0, 4);
-  if(header.size() < 4) {
+  ByteVector header = metadataHeader.mid(0, 4);
+  if(header.size() != 4) {
     debug("Ogg::FLAC::File::scan() -- Invalid Ogg/FLAC metadata header");
     return;
   }
@@ -267,11 +263,12 @@ void Ogg::FLAC::File::scan()
 
   while(!lastBlock) {
     metadataHeader = packet(++ipacket);
-
-    if(metadataHeader.isNull())
+    header = metadataHeader.mid(0, 4);
+    if(header.size() != 4) {
+      debug("Ogg::FLAC::File::scan() -- Invalid Ogg/FLAC metadata header");
       return;
+    }
 
-    header = metadataHeader.mid(0, 4);
     blockType = header[0] & 0x7f;
     lastBlock = (header[0] & 0x80) != 0;
     length = header.toUInt(1, 3, true);