# HG changeset patch # User fenrir # Date 1267210201 0 # Node ID 3ef04d1190f0aa75c49ee6ebccb5d25c204be9dd # Parent b0cb1f7efcbcb62a75b79bc82395d5426af6e8fa 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. diff -r b0cb1f7efcbc -r 3ef04d1190f0 dca.c --- a/dca.c Fri Feb 26 18:12:27 2010 +0000 +++ b/dca.c Fri Feb 26 18:50:01 2010 +0000 @@ -1244,6 +1244,10 @@ } 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;