You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2011/03/04 17:06:28 UTC

svn commit: r1078031 - /tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/LyricsHandler.java

Author: nick
Date: Fri Mar  4 16:06:28 2011
New Revision: 1078031

URL: http://svn.apache.org/viewvc?rev=1078031&view=rev
Log:
TIKA-606 - MP3 lyrics tags use a 6 digit length for the overall size, but only 5 digits for each tag

Modified:
    tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/LyricsHandler.java

Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/LyricsHandler.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/LyricsHandler.java?rev=1078031&r1=1078030&r2=1078031&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/LyricsHandler.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/LyricsHandler.java Fri Mar  4 16:06:28 2011
@@ -65,7 +65,8 @@ public class LyricsHandler {
             return;
         }
 
-        // Are there lyrics?
+        // Are there lyrics? Look for the closing Lyrics tag
+        //  at the end to decide if there is any
         int lookat = tagData.length - 9;
         if(id3v1.found) {
             lookat -= 128;
@@ -77,6 +78,9 @@ public class LyricsHandler {
                 tagData[lookat+8] == '0') {
             foundLyrics = true;
 
+            // The length (6 bytes) comes just before LYRICS200, and is the
+            //  size including the LYRICSBEGIN but excluding the 
+            //  length+LYRICS200 at the end.
             int length = Integer.parseInt(
                     new String(tagData, lookat-6, 6)
             );
@@ -86,18 +90,21 @@ public class LyricsHandler {
                     "ASCII"
             );
 
+            // Tags are a 3 letter code, 5 digit length, then data
             int pos = 0;
-            while(pos < lyrics.length()-9) {
+            while(pos < lyrics.length()-8) {
                 String tagName = lyrics.substring(pos, pos+3);
                 int tagLen = Integer.parseInt(
-                        lyrics.substring(pos+3, pos+9)
+                        lyrics.substring(pos+3, pos+8)
                 );
+                int startPos = pos + 8;
+                int endPos = startPos + tagLen;
 
                 if(tagName.equals("LYR")) {
-                    lyricsText = lyrics.substring(pos+9, pos+9+tagLen);
+                    lyricsText = lyrics.substring(startPos, endPos);
                 }
 
-                pos += tagLen;
+                pos = endPos;
             }
         }
     }