more checks and error messages

Originally committed as revision 7069 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2006-11-14 20:35:15 +00:00
parent 576a85f7c9
commit bd60e11bf4

View File

@ -2166,6 +2166,11 @@ static int mp_decode_layer3(MPADecodeContext *s)
g = &granules[ch][gr]; g = &granules[ch][gr];
g->part2_3_length = get_bits(&s->gb, 12); g->part2_3_length = get_bits(&s->gb, 12);
g->big_values = get_bits(&s->gb, 9); g->big_values = get_bits(&s->gb, 9);
if(g->big_values > 288){
av_log(NULL, AV_LOG_ERROR, "big_values too big\n");
return -1;
}
g->global_gain = get_bits(&s->gb, 8); g->global_gain = get_bits(&s->gb, 8);
/* if MS stereo only is selected, we precompute the /* if MS stereo only is selected, we precompute the
1/sqrt(2) renormalization factor */ 1/sqrt(2) renormalization factor */
@ -2179,8 +2184,10 @@ static int mp_decode_layer3(MPADecodeContext *s)
blocksplit_flag = get_bits(&s->gb, 1); blocksplit_flag = get_bits(&s->gb, 1);
if (blocksplit_flag) { if (blocksplit_flag) {
g->block_type = get_bits(&s->gb, 2); g->block_type = get_bits(&s->gb, 2);
if (g->block_type == 0) if (g->block_type == 0){
av_log(NULL, AV_LOG_ERROR, "invalid block type\n");
return -1; return -1;
}
g->switch_point = get_bits(&s->gb, 1); g->switch_point = get_bits(&s->gb, 1);
for(i=0;i<2;i++) for(i=0;i<2;i++)
g->table_select[i] = get_bits(&s->gb, 5); g->table_select[i] = get_bits(&s->gb, 5);