tag: id3v2: Fix parsing of numeric genre strings some more, by ensuring that we only...
authorJan Schmidt <thaytan@mad.scientist.com>
Wed, 10 May 2006 13:51:01 +0000 (13:51 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sun, 14 Aug 2011 23:10:28 +0000 (00:10 +0100)
Original commit message from CVS:
* gst-libs/gst/tag/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

gst-libs/gst/tag/id3v2frames.c

index b97e4d0..832b7b2 100644 (file)
@@ -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 */