Add a check for faulty Ogg/FLAC files.

This commit is contained in:
Tsuda Kageyu 2015-01-02 00:10:51 +09:00
parent 5ebb2ece80
commit bc9bbfe3fa

View 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())
return;
header = metadataHeader.mid(0, 4);
if(header.size() != 4) {
debug("Ogg::FLAC::File::scan() -- Invalid Ogg/FLAC metadata header");
return;
}
blockType = header[0] & 0x7f;
lastBlock = (header[0] & 0x80) != 0;
length = header.toUInt(1, 3, true);