diff options
-rw-r--r-- | libavcodec/dcadec.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c index 91db893c56..3ea1bcfc9d 100644 --- a/libavcodec/dcadec.c +++ b/libavcodec/dcadec.c @@ -1487,8 +1487,11 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data, s->exss_ext_mask = 0; s->xch_present = 0; - s->dca_buffer_size = avpriv_dca_convert_bitstream(buf, buf_size, s->dca_buffer, - DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE); + s->dca_buffer_size = AVERROR_INVALIDDATA; + for (i = 0; i < buf_size - 3 && s->dca_buffer_size == AVERROR_INVALIDDATA; i++) + s->dca_buffer_size = avpriv_dca_convert_bitstream(buf + i, buf_size - i, s->dca_buffer, + DCA_MAX_FRAME_SIZE + DCA_MAX_EXSS_HEADER_SIZE); + if (s->dca_buffer_size == AVERROR_INVALIDDATA) { av_log(avctx, AV_LOG_ERROR, "Not a valid DCA frame\n"); return AVERROR_INVALIDDATA; |