summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@mad.scientist.com>2006-05-10 13:51:01 +0000
committerJan Schmidt <thaytan@mad.scientist.com>2006-05-10 13:51:01 +0000
commit85c6182ef4754271cf98b67e0ad936765436d527 (patch)
treefbf6158c09765c35e22d5ebb84efc51b6572cd11
parentd2bd5e45bd41cdcd2f21d87432f3948ee26b41d0 (diff)
gst/id3demux/id3v2frames.c: Fix parsing of numeric genre strings some more, by ensuring that we only try and parse st...
Original commit message from CVS: * gst/id3demux/id3v2frames.c: (id3v2_genre_fields_to_taglist): Fix parsing of numeric genre strings some more, by ensuring that we only try and parse strings that a) Start with '(' and b) Consist only of digits. Also, when finding an escaping '((' sequence, bust it back to '(' by swallowing the first parenthesis
-rw-r--r--ChangeLog9
-rw-r--r--gst/id3demux/id3v2frames.c19
2 files changed, 26 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index cd52a6ef..b777a35a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-05-10 Jan Schmidt <thaytan@mad.scientist.com>
+
+ * gst/id3demux/id3v2frames.c: (id3v2_genre_fields_to_taglist):
+ Fix parsing of numeric genre strings some more, by ensuring that
+ we only try and parse strings that a) Start with '(' and b) Consist
+ only of digits.
+ Also, when finding an escaping '((' sequence, bust it back to '(' by
+ swallowing the first parenthesis
+
2006-05-10 Tim-Philipp Müller <tim at centricular dot net>
* ext/esd/esdsink.c: (gst_esdsink_finalize), (gst_esdsink_getcaps),
diff --git a/gst/id3demux/id3v2frames.c b/gst/id3demux/id3v2frames.c
index b97e4d01..832b7b22 100644
--- a/gst/id3demux/id3v2frames.c
+++ b/gst/id3demux/id3v2frames.c
@@ -622,8 +622,17 @@ id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
gint pos;
gboolean found = FALSE;
- /* Double parenthesis ends the numeric genres */
- if (tag_str[0] == '(' && tag_str[1] == '(')
+ /* Double parenthesis ends the numeric genres, but we need
+ * to swallow the first one so we actually output '(' */
+ if (tag_str[0] == '(' && tag_str[1] == '(') {
+ tag_str++;
+ len--;
+ break;
+ }
+
+ /* If the first char is not a parenthesis, then stop
+ * looking for parenthesised genre strings */
+ if (tag_str[0] != '(')
break;
for (pos = 1; pos < len; pos++) {
@@ -640,6 +649,12 @@ id3v2_genre_fields_to_taglist (ID3TagsWorking * work, const gchar * tag_name,
found = TRUE;
break;
}
+
+ /* If we encounter a non-digit while searching for a closing
+ * parenthesis, we should not try and interpret this as a
+ * numeric genre string */
+ if (!g_ascii_isdigit (tag_str[pos]))
+ break;
}
if (!found)
break; /* There was no closing parenthesis */