Browse Source

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
tags/v0.6
Laurent Aimar 15 years ago
parent
commit
4e06acbde4
1 changed files with 4 additions and 0 deletions
  1. +4
    -0
      libavcodec/dca.c

+ 4
- 0
libavcodec/dca.c View File

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