Be tolerant of empty FLAC seektable blocks.

This commit is contained in:
Tsuda Kageyu 2017-01-08 02:11:57 +09:00
parent 56a7656c2e
commit 13be28a52c
3 changed files with 22 additions and 1 deletions

View File

@ -506,7 +506,9 @@ void FLAC::File::scan()
return;
}
if(blockLength == 0 && blockType != MetadataBlock::Padding) {
if(blockLength == 0
&& blockType != MetadataBlock::Padding && blockType != MetadataBlock::SeekTable)
{
debug("FLAC::File::scan() -- Zero-sized metadata block found");
setValid(false);
return;

Binary file not shown.

View File

@ -63,6 +63,7 @@ class TestFLAC : public CppUnit::TestFixture
CPPUNIT_TEST(testEmptyID3v2);
CPPUNIT_TEST(testStripTags);
CPPUNIT_TEST(testRemoveXiphField);
CPPUNIT_TEST(testEmptySeekTable);
CPPUNIT_TEST_SUITE_END();
public:
@ -516,6 +517,24 @@ public:
}
}
void testEmptySeekTable()
{
ScopedFileCopy copy("empty-seektable", ".flac");
{
FLAC::File f(copy.fileName().c_str());
CPPUNIT_ASSERT(f.isValid());
f.xiphComment(true)->setTitle("XiphComment Title");
f.save();
}
{
FLAC::File f(copy.fileName().c_str());
CPPUNIT_ASSERT(f.isValid());
f.seek(42);
const ByteVector data = f.readBlock(4);
CPPUNIT_ASSERT_EQUAL(ByteVector("\x03\x00\x00\x00", 4), data);
}
}
};
CPPUNIT_TEST_SUITE_REGISTRATION(TestFLAC);