# HG changeset patch # User alexc # Date 1268130342 0 # Node ID c969ceeffb368892cbd0e91ce0d233d5447de9e8 # Parent d8c2170062ceafa21cd39a264bcc59cdd7b59de7 aacsbr: Fail early on illegal envelope counts. diff -r d8c2170062ce -r c969ceeffb36 aacsbr.c --- 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;