diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/id3.c | 4 |
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 | ||