]> granicus.if.org Git - taglib/commitdiff
Fixes access violation
authorErwin Jansen <pokowaka@gmail.com>
Sat, 10 Oct 2015 05:11:27 +0000 (22:11 -0700)
committerErwin Jansen <pokowaka@gmail.com>
Sat, 10 Oct 2015 05:11:27 +0000 (22:11 -0700)
- Fixes access violation when setting empty stringlist on integer
  properties in mp4 tag
- Add a unit test that validates the fix.

taglib/mp4/mp4tag.cpp
tests/test_mp4.cpp

index abfdbb423ad2d68160650785f3efce80f9482c95..1c188720b2d842270b383c7dee11b5fc1556bd11 100644 (file)
@@ -917,7 +917,7 @@ PropertyMap MP4::Tag::setProperties(const PropertyMap &props)
   for(; it != props.end(); ++it) {
     if(reverseKeyMap.contains(it->first)) {
       String name = reverseKeyMap[it->first];
-      if(it->first == "TRACKNUMBER" || it->first == "DISCNUMBER") {
+      if((it->first == "TRACKNUMBER" || it->first == "DISCNUMBER") && it->second.size() > 0) {
         int first = 0, second = 0;
         StringList parts = StringList::split(it->second.front(), "/");
         if(parts.size() > 0) {
@@ -928,11 +928,11 @@ PropertyMap MP4::Tag::setProperties(const PropertyMap &props)
           d->items[name] = MP4::Item(first, second);
         }
       }
-      else if(it->first == "BPM") {
+      else if(it->first == "BPM" && it->second.size() > 0) {
         int value = it->second.front().toInt();
         d->items[name] = MP4::Item(value);
       }
-      else if(it->first == "COMPILATION") {
+      else if(it->first == "COMPILATION" && it->second.size() > 0) {
         bool value = (it->second.front().toInt() != 0);
         d->items[name] = MP4::Item(value);
       }
index 78e1badf35e62d76b5cb32d1ea510299919d8baa..6841c43f87946537c12c690decb28ab5f0017932 100644 (file)
@@ -305,6 +305,14 @@ public:
     CPPUNIT_ASSERT(f.tag()->contains("cpil"));
     CPPUNIT_ASSERT_EQUAL(false, f.tag()->item("cpil").toBool());
     CPPUNIT_ASSERT_EQUAL(StringList("0"), tags["COMPILATION"]);
+
+    // Empty properties do not result in access violations
+    // when converting integers
+    tags["TRACKNUMBER"] = StringList();
+    tags["DISCNUMBER"] = StringList();
+    tags["BPM"] = StringList();
+    tags["COMPILATION"] = StringList();
+    f.setProperties(tags);
   }
 
   void testFuzzedFile()