From 7e7ee7278b3b10a3a3a5d87134b08f962acf6da8 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Fri, 19 May 2006 14:05:53 +0000 Subject: [PATCH] tag: id3v2: Don't output any tag when we encounter a negative track number - the tag type is uint, so... Original commit message from CVS: * gst-libs/gst/tag/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) --- gst-libs/gst/tag/id3v2frames.c | 55 +++++++++++++++------------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c index 21ca4f80f6..f8c1453666 100644 --- a/gst-libs/gst/tag/id3v2frames.c +++ b/gst-libs/gst/tag/id3v2frames.c @@ -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; + gint current, total; - 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); + if (sscanf (tag_str, "%d/%d", ¤t, &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); + } } + } else if (sscanf (tag_str, "%d", ¤t) != 1) { + /* Not an integer in the string */ + GST_WARNING ("Tag string for tag %s does not contain an integer - " + "ignoring", tag_name); + break; } - if (*check != '\0') - 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: