]> granicus.if.org Git - taglib/commitdiff
Check invalid Unicode APE keys properly.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Tue, 8 Nov 2016 15:28:35 +0000 (00:28 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Tue, 8 Nov 2016 15:29:03 +0000 (00:29 +0900)
taglib/ape/apetag.cpp
tests/test_apetag.cpp

index 359fc302ed5cdf0ffcf3f1c9078ee07891e340ee..c31237eb0d9031eebdb557373fd330b4f5a01d24 100644 (file)
@@ -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
index 653de7508226d73a7ecadec429ce6491edba4e2c..577ec4b0f5bef36521373644648d4d5f770a9582 100644 (file)
@@ -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());
   }