From ae17b526ff69cfa3c02078cd5b6cfc1c6aa61de7 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Fri, 30 Aug 2002 22:01:35 +0000 Subject: [PATCH] Better handling of garbage in ID3V2 tags git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2090 a1c6a512-1295-4272-9138-f99709370657 --- firmware/id3.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/firmware/id3.c b/firmware/id3.c index d97e7b7986..d83285568f 100644 --- a/firmware/id3.c +++ b/firmware/id3.c @@ -159,9 +159,9 @@ static bool setid3v1title(int fd, struct mp3entry *entry) */ static void setid3v2title(int fd, struct mp3entry *entry) { - unsigned int minframesize; + int minframesize; int size; - unsigned int readsize = 0, headerlen; + int readsize = 0, headerlen; char *title = NULL; char *artist = NULL; char *album = NULL; @@ -181,7 +181,7 @@ static void setid3v2title(int fd, struct mp3entry *entry) return; version = (unsigned short int)header[3]; - + /* Read all frames in the tag */ size = entry->id3v2len - 10; @@ -193,7 +193,7 @@ static void setid3v2title(int fd, struct mp3entry *entry) *(buffer + size) = '\0'; - /* Set minimun frame size according to ID3v2 version */ + /* Set minimum frame size according to ID3v2 version */ if(version > 2) minframesize = 12; else @@ -218,7 +218,9 @@ static void setid3v2title(int fd, struct mp3entry *entry) (header[4] << 8) + (header[5]); } - if(headerlen < 1) + + /* Continue if the frame length seems bad */ + if(headerlen > size) continue; /* Check for certain frame headers */