Mercurial > libavcodec.hg
changeset 11434:c969ceeffb36 libavcodec
aacsbr: Fail early on illegal envelope counts.
author | alexc |
---|---|
date | Tue, 09 Mar 2010 10:25:42 +0000 |
parents | d8c2170062ce |
children | 4dfd0bfbb8dc |
files | aacsbr.c |
diffstat | 1 files changed, 14 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/aacsbr.c Tue Mar 09 09:27:11 2010 +0000 +++ b/aacsbr.c Tue Mar 09 10:25:42 2010 +0000 @@ -628,6 +628,13 @@ if (ch_data->bs_num_env[1] == 1) ch_data->bs_amp_res = 0; + if (ch_data->bs_num_env[1] > 4) { + av_log(ac->avccontext, AV_LOG_ERROR, + "Invalid bitstream, too many SBR envelopes in FIXFIX type SBR frame: %d\n", + ch_data->bs_num_env[1]); + return -1; + } + ch_data->bs_pointer = 0; ch_data->bs_freq_res[1] = get_bits1(gb); @@ -666,6 +673,13 @@ ch_data->bs_num_rel[1] = get_bits(gb, 2); ch_data->bs_num_env[1] = ch_data->bs_num_rel[0] + ch_data->bs_num_rel[1] + 1; + if (ch_data->bs_num_env[1] > 5) { + av_log(ac->avccontext, AV_LOG_ERROR, + "Invalid bitstream, too many SBR envelopes in VARVAR type SBR frame: %d\n", + ch_data->bs_num_env[1]); + return -1; + } + for (i = 0; i < ch_data->bs_num_rel[0]; i++) ch_data->bs_rel_bord[0][i] = 2 * get_bits(gb, 2) + 2; for (i = 0; i < ch_data->bs_num_rel[1]; i++) @@ -683,18 +697,6 @@ ch_data->bs_pointer); return -1; } - if (ch_data->bs_frame_class == FIXFIX && ch_data->bs_num_env[1] > 4) { - av_log(ac->avccontext, AV_LOG_ERROR, - "Invalid bitstream, too many SBR envelopes in FIXFIX type SBR frame: %d\n", - ch_data->bs_num_env[1]); - return -1; - } - if (ch_data->bs_frame_class == VARVAR && ch_data->bs_num_env[1] > 5) { - av_log(ac->avccontext, AV_LOG_ERROR, - "Invalid bitstream, too many SBR envelopes in VARVAR type SBR frame: %d\n", - ch_data->bs_num_env[1]); - return -1; - } ch_data->bs_num_noise = (ch_data->bs_num_env[1] > 1) + 1;