From d4cb075af70f1b56e80958f79cc4b584c1e68d67 Mon Sep 17 00:00:00 2001 From: Magnus Holmgren Date: Sun, 6 Jan 2008 19:49:25 +0000 Subject: [PATCH] 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 --- firmware/id3.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/firmware/id3.c b/firmware/id3.c index e2f45468b2..1820078469 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)