diff --git a/src/msfileplayer.c b/src/msfileplayer.c index af4f0de..eebf9b4 100644 --- a/src/msfileplayer.c +++ b/src/msfileplayer.c @@ -86,12 +86,14 @@ static int read_wav_header(PlayerData *d){ d->rate=le_uint32(format_chunk->rate); d->nchannels=le_uint16(format_chunk->channel); - if (format_chunk->len-0x10>0) + unsigned int format_len = le_uint32(format_chunk->len); + + if (format_len-0x10>0) { - lseek(d->fd,(format_chunk->len-0x10),SEEK_CUR); + lseek(d->fd,(format_len-0x10),SEEK_CUR); } - d->hsize=sizeof(wave_header_t)-0x10+format_chunk->len; + d->hsize=sizeof(wave_header_t)-0x10+format_len; len = read(d->fd, header3, sizeof(header3)) ; if (len != sizeof(header3)){ @@ -101,10 +103,12 @@ static int read_wav_header(PlayerData *d){ count=0; while (strncmp(data_chunk->data, "data", 4)!=0 && count<30) { - ms_warning("skipping chunk=%s len=%i", data_chunk->data, data_chunk->len); - lseek(d->fd,data_chunk->len,SEEK_CUR); + unsigned int data_len = le_uint32(data_chunk->len); + + ms_warning("skipping chunk=%s len=%i", data_chunk->data, data_len); + lseek(d->fd,data_len,SEEK_CUR); count++; - d->hsize=d->hsize+len+data_chunk->len; + d->hsize=d->hsize+len+data_len; len = read(d->fd, header3, sizeof(header3)) ; if (len != sizeof(header3)){