forked from len0rd/rockbox
Commit both patches in FS#10833 - Protect against division by zero in AAC (mp4) codec by Juliusz Chroboczek. Adds some return value checking so that faad errors don't crash rockbox when decoding broken or unsupported files.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23983 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
69a5ff7f8a
commit
d6ae8edc13
3 changed files with 8 additions and 6 deletions
|
@ -53,6 +53,7 @@ enum codec_status codec_main(void)
|
||||||
int err;
|
int err;
|
||||||
uint32_t s = 0;
|
uint32_t s = 0;
|
||||||
unsigned char c = 0;
|
unsigned char c = 0;
|
||||||
|
void *ret;
|
||||||
|
|
||||||
/* Generic codec initialisation */
|
/* Generic codec initialisation */
|
||||||
ci->configure(DSP_SET_STEREO_MODE, STEREO_NONINTERLEAVED);
|
ci->configure(DSP_SET_STEREO_MODE, STEREO_NONINTERLEAVED);
|
||||||
|
@ -179,11 +180,10 @@ next_track:
|
||||||
buffer=ci->request_buffer(&n,sample_byte_size);
|
buffer=ci->request_buffer(&n,sample_byte_size);
|
||||||
|
|
||||||
/* Decode one block - returned samples will be host-endian */
|
/* Decode one block - returned samples will be host-endian */
|
||||||
NeAACDecDecode(decoder, &frame_info, buffer, n);
|
ret = NeAACDecDecode(decoder, &frame_info, buffer, n);
|
||||||
/* Ignore return value, we access samples in the decoder struct
|
|
||||||
* directly.
|
/* NeAACDecDecode may sometimes return NULL without setting error. */
|
||||||
*/
|
if (ret == NULL || frame_info.error > 0) {
|
||||||
if (frame_info.error > 0) {
|
|
||||||
LOGF("FAAD: decode error '%s'\n", NeAACDecGetErrorMessage(frame_info.error));
|
LOGF("FAAD: decode error '%s'\n", NeAACDecGetErrorMessage(frame_info.error));
|
||||||
err = CODEC_ERROR;
|
err = CODEC_ERROR;
|
||||||
goto done;
|
goto done;
|
||||||
|
|
|
@ -194,7 +194,8 @@ unsigned int get_sample_offset(demux_res_t *demux_res, uint32_t sample)
|
||||||
prev_chunk_samples = demux_res->sample_to_chunk[i].num_samples;
|
prev_chunk_samples = demux_res->sample_to_chunk[i].num_samples;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sample >= demux_res->sample_to_chunk[0].num_samples)
|
if (prev_chunk_samples > 0 &&
|
||||||
|
sample >= demux_res->sample_to_chunk[0].num_samples)
|
||||||
{
|
{
|
||||||
chunk = prev_chunk + (sample - total_samples) / prev_chunk_samples;
|
chunk = prev_chunk + (sample - total_samples) / prev_chunk_samples;
|
||||||
}
|
}
|
||||||
|
|
|
@ -508,6 +508,7 @@ Simon Rothen
|
||||||
Pavel Rzehák
|
Pavel Rzehák
|
||||||
Diego Herranz
|
Diego Herranz
|
||||||
Viktor Varga
|
Viktor Varga
|
||||||
|
Juliusz Chroboczek
|
||||||
|
|
||||||
The libmad team
|
The libmad team
|
||||||
The wavpack team
|
The wavpack team
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue