gst/id3demux/id3v2frames.c: Don't output any tag when we encounter a negative track...
authorJan Schmidt <thaytan@mad.scientist.com>
Fri, 19 May 2006 14:05:53 +0000 (14:05 +0000)
committerJan Schmidt <thaytan@mad.scientist.com>
Fri, 19 May 2006 14:05:53 +0000 (14:05 +0000)
Original commit message from CVS:
* gst/id3demux/id3v2frames.c: (id3v2_tag_to_taglist):
Don't output any tag when we encounter a negative track number - the
tag type is uint, so we end up outputting huge positive numbers
instead. (Fixes: #342029)

ChangeLog
gst/id3demux/id3v2frames.c

index b7cc4cb475bed3d2b35a506da094fa77e9096ef2..ac5986d20211cfc37de3652b28b66a12f7eb3443 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-05-19  Jan Schmidt  <thaytan@mad.scientist.com>
+
+       * gst/id3demux/id3v2frames.c: (id3v2_tag_to_taglist):
+       Don't output any tag when we encounter a negative track number - the
+       tag type is uint, so we end up outputting huge positive numbers
+       instead. (Fixes: #342029)
+
 2006-05-19  Thomas Vander Stichele  <thomas at apestaart dot org>
 
        * configure.ac:
index 21ca4f80f6569991694dd16e7d7c992bf8889d8f..f8c145366645050b121e0b75dd501228ab0193e4 100644 (file)
@@ -450,41 +450,34 @@ id3v2_tag_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
   switch (tag_type) {
     case G_TYPE_UINT:
     {
-      guint tmp;
-      gchar *check;
-
-      tmp = strtoul ((char *) tag_str, &check, 10);
-
-      if (strcmp (tag_name, GST_TAG_TRACK_NUMBER) == 0) {
-        if (*check == '/') {
-          guint total;
-
-          check++;
-          total = strtoul (check, &check, 10);
-          if (*check != '\0')
-            break;
-
-          gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
-              GST_TAG_TRACK_COUNT, total, NULL);
-        }
-      } else if (strcmp (tag_name, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) {
-        if (*check == '/') {
-          guint total;
-
-          check++;
-          total = strtoul (check, &check, 10);
-          if (*check != '\0')
-            break;
-
-          gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
-              GST_TAG_ALBUM_VOLUME_COUNT, total, NULL);
+      gint current, total;
+
+      if (sscanf (tag_str, "%d/%d", &current, &total) == 2) {
+        if (total < 0) {
+          GST_WARNING ("Ignoring negative value for total %d in tag %s",
+              total, tag_name);
+        } else {
+          if (strcmp (tag_name, GST_TAG_TRACK_NUMBER) == 0) {
+            gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+                GST_TAG_TRACK_COUNT, total, NULL);
+          } else if (strcmp (tag_name, GST_TAG_ALBUM_VOLUME_NUMBER) == 0) {
+            gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND,
+                GST_TAG_ALBUM_VOLUME_COUNT, total, NULL);
+          }
         }
-      }
-
-      if (*check != '\0')
+      } else if (sscanf (tag_str, "%d", &current) != 1) {
+        /* Not an integer in the string */
+        GST_WARNING ("Tag string for tag %s does not contain an integer - "
+            "ignoring", tag_name);
         break;
+      }
 
-      gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, tmp, NULL);
+      if (current < 0)
+        GST_WARNING ("Ignoring negative value %d in tag %s", current, tag_name);
+      else {
+        gst_tag_list_add (tag_list, GST_TAG_MERGE_APPEND, tag_name, current,
+            NULL);
+      }
       break;
     }
     case G_TYPE_UINT64: