summaryrefslogtreecommitdiffstats
path: root/gst/id3demux
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@mad.scientist.com>2006-05-19 14:05:53 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2006-05-19 14:05:53 +0000
commita4dbbd5d2afcc74454c92fa2dc3958eb951ba3a3 (patch)
treee4d1a1f203d7854d90b998f6355ae48ac1d4f04a /gst/id3demux
parent46e6f57714d95a6462ab7bae2532499a09079beb (diff)
gst/id3demux/id3v2frames.c: Don't output any tag when we encounter a negative track number - the tag type is uint, so...
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)
Diffstat (limited to 'gst/id3demux')
-rw-r--r--gst/id3demux/id3v2frames.c57
1 files changed, 25 insertions, 32 deletions
diff --git a/gst/id3demux/id3v2frames.c b/gst/id3demux/id3v2frames.c
index 21ca4f80..f8c14536 100644
--- a/gst/id3demux/id3v2frames.c
+++ b/gst/id3demux/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;
-
- 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: