diff options
| author | Miika Pekkarinen <miipekk@ihme.org> | 2006-01-21 08:17:40 +0000 |
|---|---|---|
| committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-01-21 08:17:40 +0000 |
| commit | 33914a7dfc82fd6badaf774619539b92f3b7c255 (patch) | |
| tree | fe3e12d57443e037b1aab9efcd33a9aa7e201de4 /apps/codecs.c | |
| parent | 0e159f13cf4562cf17d0a2edd16bfd3b665c8473 (diff) | |
| download | rockbox-33914a7dfc82fd6badaf774619539b92f3b7c255.zip rockbox-33914a7dfc82fd6badaf774619539b92f3b7c255.tar.gz rockbox-33914a7dfc82fd6badaf774619539b92f3b7c255.tar.bz2 rockbox-33914a7dfc82fd6badaf774619539b92f3b7c255.tar.xz | |
Fixed the codec loader bug.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8403 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs.c')
| -rw-r--r-- | apps/codecs.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/apps/codecs.c b/apps/codecs.c index 88b2ea4..6720de9 100644 --- a/apps/codecs.c +++ b/apps/codecs.c @@ -238,13 +238,12 @@ int codec_load_ram(char* codecptr, int size, void* ptr2, int bufwrap, if ((char *)&codecbuf[0] != codecptr) { /* zero out codec buffer to ensure a properly zeroed bss area */ memset(codecbuf, 0, CODEC_SIZE); - + size = MIN(size, CODEC_SIZE); copy_n = MIN(size, bufwrap); memcpy(codecbuf, codecptr, copy_n); - size -= copy_n; - if (size > 0) { - memcpy(&codecbuf[copy_n], ptr2, size); + if (size - copy_n > 0) { + memcpy(&codecbuf[copy_n], ptr2, size - copy_n); } } hdr = (struct codec_header *)codecbuf; @@ -253,7 +252,9 @@ int codec_load_ram(char* codecptr, int size, void* ptr2, int bufwrap, || hdr->magic != CODEC_MAGIC || hdr->target_id != TARGET_ID || hdr->load_addr != codecbuf - || hdr->end_addr > codecbuf + CODEC_SIZE) { + || hdr->end_addr > codecbuf + CODEC_SIZE) + { + logf("codec header error"); return CODEC_ERROR; } #else /* SIMULATOR */ |