Make sure we don't write UTF8 or UTF16BE to ID3v2.3 tags.

This commit is contained in:
Tsuda Kageyu
2016-02-15 00:22:18 +09:00
parent c349ba3a31
commit d037b8c908
5 changed files with 65 additions and 24 deletions

View File

@ -70,7 +70,8 @@ class TestID3v2 : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(TestID3v2);
CPPUNIT_TEST(testUnsynchDecode);
CPPUNIT_TEST(testDowngradeUTF8ForID3v23);
CPPUNIT_TEST(testDowngradeUTF8ForID3v23_1);
CPPUNIT_TEST(testDowngradeUTF8ForID3v23_2);
CPPUNIT_TEST(testUTF16BEDelimiter);
CPPUNIT_TEST(testUTF16Delimiter);
CPPUNIT_TEST(testReadStringField);
@ -130,7 +131,7 @@ public:
CPPUNIT_ASSERT_EQUAL(String("My babe just cares for me"), f.tag()->title());
}
void testDowngradeUTF8ForID3v23()
void testDowngradeUTF8ForID3v23_1()
{
ScopedFileCopy copy("xing", ".mp3");
string newname = copy.fileName();
@ -154,6 +155,27 @@ public:
CPPUNIT_ASSERT_EQUAL(String::UTF16, f2.textEncoding());
}
void testDowngradeUTF8ForID3v23_2()
{
ScopedFileCopy copy("xing", ".mp3");
ID3v2::UnsynchronizedLyricsFrame *f
= new ID3v2::UnsynchronizedLyricsFrame(String::UTF8);
f->setText("Foo");
MPEG::File file(copy.fileName().c_str());
file.ID3v2Tag(true)->addFrame(f);
file.save(MPEG::File::ID3v2, true, 3);
CPPUNIT_ASSERT(file.hasID3v2Tag());
ByteVector data = f->render();
CPPUNIT_ASSERT_EQUAL((unsigned int)(4+4+2+1+3+2+2+6+2), data.size());
ID3v2::UnsynchronizedLyricsFrame f2(data);
CPPUNIT_ASSERT_EQUAL(String("Foo"), f2.text());
CPPUNIT_ASSERT_EQUAL(String::UTF16, f2.textEncoding());
}
void testUTF16BEDelimiter()
{
ID3v2::TextIdentificationFrame f(ByteVector("TPE1"), String::UTF16BE);