1
0
Fork 0
forked from len0rd/rockbox

Fixed header parsing in AIFF. The minimum header size is 54 bytes for an audio file. SSND chunk block_size and offset are 32-bit values, not 16-bit; this bug would probably never even matter since most sound data isn't block aligned.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11596 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2006-11-25 21:27:46 +00:00
parent 17507b979d
commit cee9d3b47b
2 changed files with 37 additions and 37 deletions

View file

@ -95,7 +95,7 @@ next_track:
/* assume the AIFF header is less than 1024 bytes */
buf = ci->request_buffer(&n, 1024);
if (n < 44) {
if (n < 54) {
i = CODEC_ERROR;
goto done;
}
@ -142,9 +142,9 @@ next_track:
goto done;
}
/* offset2snd */
offset2snd = ((buf[8]<<8)|buf[9]);
offset2snd = (buf[8]<<24)|(buf[9]<<16)|(buf[10]<<8)|buf[11];
/* block_size */
block_size = ((buf[10]<<8)|buf[11]);
block_size = (buf[12]<<24)|(buf[13]<<16)|(buf[14]<<8)|buf[15];
if (block_size == 0)
block_size = num_channels*sample_size;
numbytes = i - 8 - offset2snd;

View file

@ -1752,7 +1752,7 @@ static bool get_aiff_metadata(int fd, struct mp3entry* id3)
int i;
if ((lseek(fd, 0, SEEK_SET) < 0)
|| ((read_bytes = read(fd, buf, sizeof(id3->path))) < 44))
|| ((read_bytes = read(fd, buf, sizeof(id3->path))) < 54))
{
return false;
}