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;
             }
         }
     }


Reply via email to