Fixed a segfault in the DCA decoder with corrupted streams.

It happens when the number of channels defined by DCAContext:acmod is lower
than DCAContext:prim_channels. In this case, dca_subsubframe() will call
qmf_32_subbands() using s->channel_order_tab[] entries equal to -1.

Originally committed as revision 22083 to svn://svn.ffmpeg.org/ffmpeg/trunk
release/0.6
Laurent Aimar 15 years ago
parent 4784b0922f
commit 4e06acbde4
  1. 4
      libavcodec/dca.c

@ -1244,6 +1244,10 @@ static int dca_decode_frame(AVCodecContext * avctx,
} else
s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
if (s->prim_channels > 0 &&
s->channel_order_tab[s->prim_channels - 1] < 0)
return -1;
if(avctx->request_channels == 2 && s->prim_channels > 2) {
channels = 2;
s->output = DCA_STEREO;

Loading…
Cancel
Save