Merge commit '62b1e3b1031e901105d78e831120de8e4c3e0013'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 29 Jul 2013 09:42:47 +0000 (11:42 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 29 Jul 2013 09:46:28 +0000 (11:46 +0200)
* commit '62b1e3b1031e901105d78e831120de8e4c3e0013':
  aasc: Check minimum buffer size

Conflicts:
libavcodec/aasc.c

See: e1631f8ebe9a8f2a9cca85d60160b9be94eb63f3
See: 8a57ca5c6a1c0ad28afa7ea6f824981e6761cce1
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/aasc.c

@@@ -97,24 -73,14 +97,22 @@@ static int aasc_decode_frame(AVCodecCon
      compr     = AV_RL32(buf);
      buf      += 4;
      buf_size -= 4;
 +    psize = avctx->bits_per_coded_sample / 8;
 +    switch (avctx->codec_tag) {
 +    case MKTAG('A', 'A', 'S', '4'):
 +        bytestream2_init(&s->gb, buf - 4, buf_size + 4);
 +        ff_msrle_decode(avctx, (AVPicture*)s->frame, 8, &s->gb);
 +        break;
 +    case MKTAG('A', 'A', 'S', 'C'):
      switch (compr) {
      case 0:
 -        stride = (avctx->width * 3 + 3) & ~3;
 +        stride = (avctx->width * psize + psize) & ~psize;
+         if (buf_size < stride * avctx->height)
+             return AVERROR_INVALIDDATA;
          for (i = avctx->height - 1; i >= 0; i--) {
-             if (avctx->width * psize > buf_size) {
-                 av_log(avctx, AV_LOG_ERROR, "Next line is beyond buffer bounds\n");
-                 break;
-             }
 -            memcpy(s->frame->data[0] + i * s->frame->linesize[0], buf, avctx->width * 3);
 +            memcpy(s->frame->data[0] + i * s->frame->linesize[0], buf, avctx->width * psize);
              buf += stride;
 +            buf_size -= stride;
          }
          break;
      case 1: