diff --git a/libavcodec/dca.c b/libavcodec/dca.c index 989c6a286e..4b232c7006 100644 --- a/libavcodec/dca.c +++ b/libavcodec/dca.c @@ -1298,7 +1298,13 @@ static int dca_decode_frame(AVCodecContext * avctx, switch(bits) { case 0x5a5a5a5a: { int ext_base_ch = s->prim_channels; - int ext_amode; + int ext_amode, xch_fsize; + + /* validate sync word using XCHFSIZE field */ + xch_fsize = show_bits(&s->gb, 10); + if((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) && + (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1)) + continue; /* skip length-to-end-of-frame field for the moment */ skip_bits(&s->gb, 10);