summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Holmgren <magnushol@gmail.com>2008-01-06 19:49:25 +0000
committerMagnus Holmgren <magnushol@gmail.com>2008-01-06 19:49:25 +0000
commitd4cb075af70f1b56e80958f79cc4b584c1e68d67 (patch)
treef27e7c59ec6ba322f77e0e33f8fcc711ed052de5
parentf77b4da0c8f97e3758dcd536b732ad95454b53e6 (diff)
downloadrockbox-d4cb075af70f1b56e80958f79cc4b584c1e68d67.zip
rockbox-d4cb075af70f1b56e80958f79cc4b584c1e68d67.tar.gz
rockbox-d4cb075af70f1b56e80958f79cc4b584c1e68d67.tar.bz2
rockbox-d4cb075af70f1b56e80958f79cc4b584c1e68d67.tar.xz
Fix reading of ID3V2 tags with frame data length fields, hopefully without breaking anything else.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16006 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/id3.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index e2f4546..1820078 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -838,9 +838,6 @@ static void setid3v2title(int fd, struct mp3entry *entry)
framelen = bytes2int(0, header[3], header[4], header[5]);
}
- /* Keep track of the total size */
- totframelen = framelen;
-
logf("framelen = %ld", framelen);
if(framelen == 0){
if (header[0] == 0 && header[1] == 0 && header[2] == 0)
@@ -870,10 +867,9 @@ static void setid3v2title(int fd, struct mp3entry *entry)
if(flags & 0x000c) /* Compression or encryption */
{
- /* Skip it using the total size in case
- it was truncated */
- size -= totframelen;
- lseek(fd, totframelen, SEEK_CUR);
+ /* Skip it */
+ size -= framelen;
+ lseek(fd, framelen, SEEK_CUR);
continue;
}
@@ -891,6 +887,9 @@ static void setid3v2title(int fd, struct mp3entry *entry)
}
}
+ /* Keep track of the remaining frame size */
+ totframelen = framelen;
+
/* If the frame is larger than the remaining buffer space we try
to read as much as would fit in the buffer */
if(framelen >= buffersize - bufferpos)