more checks and error messages

Originally committed as revision 7069 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Michael Niedermayer 18 years ago
parent 576a85f7c9
commit bd60e11bf4
  1. 9
      libavcodec/mpegaudiodec.c

@ -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);

Loading…
Cancel
Save