From: Tsuda Kageyu Date: Tue, 8 Nov 2016 15:28:35 +0000 (+0900) Subject: Check invalid Unicode APE keys properly. X-Git-Tag: v1.12-beta-1~117 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=499f6db9776c9d6f428814af801f84bf93227eab;p=taglib Check invalid Unicode APE keys properly. --- diff --git a/taglib/ape/apetag.cpp b/taglib/ape/apetag.cpp index 359fc302..c31237eb 100644 --- a/taglib/ape/apetag.cpp +++ b/taglib/ape/apetag.cpp @@ -299,7 +299,7 @@ bool APE::Tag::checkKey(const String &key) if(key.size() < MinKeyLength || key.size() > MaxKeyLength) return false; - return isKeyValid(key.data(String::Latin1)); + return isKeyValid(key.data(String::UTF8)); } APE::Footer *APE::Tag::footer() const diff --git a/tests/test_apetag.cpp b/tests/test_apetag.cpp index 653de750..577ec4b0 100644 --- a/tests/test_apetag.cpp +++ b/tests/test_apetag.cpp @@ -114,18 +114,21 @@ public: PropertyMap properties; properties["A"] = String("invalid key: one character"); properties["MP+"] = String("invalid key: forbidden string"); + properties[L"\x1234\x3456"] = String("invalid key: Unicode"); properties["A B~C"] = String("valid key: space and tilde"); properties["ARTIST"] = String("valid key: normal one"); APE::Tag tag; PropertyMap unsuccessful = tag.setProperties(properties); - CPPUNIT_ASSERT_EQUAL((unsigned int)2, unsuccessful.size()); + CPPUNIT_ASSERT_EQUAL((unsigned int)3, unsuccessful.size()); CPPUNIT_ASSERT(unsuccessful.contains("A")); CPPUNIT_ASSERT(unsuccessful.contains("MP+")); + CPPUNIT_ASSERT(unsuccessful.contains(L"\x1234\x3456")); CPPUNIT_ASSERT_EQUAL((unsigned int)2, tag.itemListMap().size()); tag.addValue("VALID KEY", "Test Value 1"); tag.addValue("INVALID KEY \x7f", "Test Value 2"); + tag.addValue(L"INVALID KEY \x1234\x3456", "Test Value 3"); CPPUNIT_ASSERT_EQUAL((unsigned int)3, tag.itemListMap().size()); }