summaryrefslogtreecommitdiff
path: root/libavcodec/dca.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/dca.c')
-rw-r--r--libavcodec/dca.c8
1 files changed, 7 insertions, 1 deletions
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);