From bc9bbfe3fa3f396bffb951c8f5681edea2c03b44 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Fri, 2 Jan 2015 00:10:51 +0900 Subject: [PATCH] Add a check for faulty Ogg/FLAC files. --- taglib/ogg/flac/oggflacfile.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/taglib/ogg/flac/oggflacfile.cpp b/taglib/ogg/flac/oggflacfile.cpp index 0c1d61b6..1258e705 100644 --- a/taglib/ogg/flac/oggflacfile.cpp +++ b/taglib/ogg/flac/oggflacfile.cpp @@ -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); -- 2.50.1