summaryrefslogtreecommitdiff
path: root/firmware/id3.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/id3.c')
-rw-r--r--firmware/id3.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index a4406616c3..d71ba2f4dd 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -401,6 +401,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
401 int frequency; 401 int frequency;
402 int chmode; 402 int chmode;
403 int bytecount; 403 int bytecount;
404 int bytelimit;
404 int bittable; /* which bitrate table to use */ 405 int bittable; /* which bitrate table to use */
405 bool header_found = false; 406 bool header_found = false;
406 407
@@ -421,6 +422,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
421 422
422 /* Loop trough file until we find a frame header */ 423 /* Loop trough file until we find a frame header */
423 bytecount = entry->id3v2len - 1; 424 bytecount = entry->id3v2len - 1;
425 bytelimit = entry->id3v2len + 0x20000;
424 restart: 426 restart:
425 do { 427 do {
426 header <<= 8; 428 header <<= 8;
@@ -430,7 +432,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
430 432
431 /* Quit if we haven't found a valid header within 128K */ 433 /* Quit if we haven't found a valid header within 128K */
432 bytecount++; 434 bytecount++;
433 if(bytecount > 0x20000) 435 if(bytecount > bytelimit)
434 return 0; 436 return 0;
435 } while(!mp3frameheader(header)); 437 } while(!mp3frameheader(header));
436 438