Merge commit '494f2d4f9e834db1eaf1a7d0160d497f9802013d' into release/1.1
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 7 Oct 2013 23:56:25 +0000 (01:56 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 8 Oct 2013 00:03:40 +0000 (02:03 +0200)
* commit '494f2d4f9e834db1eaf1a7d0160d497f9802013d':
  vc1dec: Make sure last_picture is initialized in vc1_decode_skip_blocks
  r3d: Add more input value validation
  fraps: Make the input buffer size checks more strict
  svq3: Avoid a division by zero
  rmdec: Validate the fps value
  twinvqdec: Check the ibps parameter separately
  asfdec: Check the return value of asf_read_stream_properties
  mxfdec: set audio timebase to 1/samplerate

Conflicts:
libavcodec/fraps.c
libavcodec/svq3.c
libavformat/mxfdec.c
tests/ref/fate/mxf-demux
tests/ref/seek/lavf-mxf
tests/ref/seek/lavf-mxf_d10

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/fraps.c
libavcodec/svq3.c
libavcodec/twinvq.c
libavcodec/vc1dec.c
libavformat/asfdec.c
libavformat/mxfdec.c
libavformat/r3d.c
libavformat/rmdec.c

@@@ -139,12 -138,15 +139,17 @@@ static int decode_frame(AVCodecContext 
      const uint32_t *buf32;
      uint32_t *luma1,*luma2,*cb,*cr;
      uint32_t offs[4];
 -    int i, j, is_chroma, planes;
 +    int i, j, is_chroma;
 +    const int planes = 3;
 +    uint8_t *out;
      enum AVPixelFormat pix_fmt;
 -    int prev_pic_bit, expected_size;
 +    int ret;
  
+     if (buf_size < 4) {
+         av_log(avctx, AV_LOG_ERROR, "Packet is too short\n");
+         return AVERROR_INVALIDDATA;
+     }
      header = AV_RL32(buf);
      version = header & 0xff;
      header_size = (header & (1<<30))? 8 : 4; /* bit 30 means pad to 8 bytes */
      }
      avctx->pix_fmt = pix_fmt;
  
 -    expected_size = header_size;
 +    if ((ret = ff_thread_get_buffer(avctx, f))) {
 +        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 +        return ret;
 +    }
  
-     switch(version) {
+     switch (version) {
      case 0:
      default:
          /* Fraps v0 is a reordered YUV420 */
 -        if (!prev_pic_bit)
 -            expected_size += avctx->width * avctx->height * 3 / 2;
 -        if (buf_size != expected_size) {
 -            av_log(avctx, AV_LOG_ERROR,
 -                   "Invalid frame length %d (should be %d)\n",
 -                   buf_size, expected_size);
 -            return AVERROR_INVALIDDATA;
 -        }
 -
 -        if (( (avctx->width % 8) != 0) || ( (avctx->height % 2) != 0 )) {
 +        if ( (avctx->width % 8) != 0 || (avctx->height % 2) != 0 ) {
              av_log(avctx, AV_LOG_ERROR, "Invalid frame size %dx%d\n",
                     avctx->width, avctx->height);
 -            return -1;
 +            return AVERROR_INVALIDDATA;
          }
  
-         buf32=(const uint32_t*)buf;
-         for(y=0; y<avctx->height/2; y++){
-             luma1=(uint32_t*)&f->data[0][ y*2*f->linesize[0] ];
-             luma2=(uint32_t*)&f->data[0][ (y*2+1)*f->linesize[0] ];
-             cr=(uint32_t*)&f->data[1][ y*f->linesize[1] ];
-             cb=(uint32_t*)&f->data[2][ y*f->linesize[2] ];
-             for(x=0; x<avctx->width; x+=8){
 -        f->reference = 1;
 -        f->buffer_hints = FF_BUFFER_HINTS_VALID |
 -                          FF_BUFFER_HINTS_PRESERVE |
 -                          FF_BUFFER_HINTS_REUSABLE;
 -        if (avctx->reget_buffer(avctx, f)) {
 -            av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
 -            return -1;
 -        }
 -        f->pict_type = prev_pic_bit ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
 -        f->key_frame = f->pict_type == AV_PICTURE_TYPE_I;
 -
 -        if (f->pict_type == AV_PICTURE_TYPE_I) {
 -            buf32=(const uint32_t*)buf;
 -            for(y=0; y<avctx->height/2; y++){
 -                luma1=(uint32_t*)&f->data[0][ y*2*f->linesize[0] ];
 -                luma2=(uint32_t*)&f->data[0][ (y*2+1)*f->linesize[0] ];
 -                cr=(uint32_t*)&f->data[1][ y*f->linesize[1] ];
 -                cb=(uint32_t*)&f->data[2][ y*f->linesize[2] ];
 -                for(x=0; x<avctx->width; x+=8){
 -                    *(luma1++) = *(buf32++);
 -                    *(luma1++) = *(buf32++);
 -                    *(luma2++) = *(buf32++);
 -                    *(luma2++) = *(buf32++);
 -                    *(cr++) = *(buf32++);
 -                    *(cb++) = *(buf32++);
 -                }
++        buf32 = (const uint32_t*)buf;
++        for (y = 0; y < avctx->height / 2; y++) {
++            luma1 = (uint32_t*)&f->data[0][  y * 2      * f->linesize[0] ];
++            luma2 = (uint32_t*)&f->data[0][ (y * 2 + 1) * f->linesize[0] ];
++            cr    = (uint32_t*)&f->data[1][  y          * f->linesize[1] ];
++            cb    = (uint32_t*)&f->data[2][  y          * f->linesize[2] ];
++            for(x=0; x<avctx->width; x+=8) {
 +                *luma1++ = *buf32++;
 +                *luma1++ = *buf32++;
 +                *luma2++ = *buf32++;
 +                *luma2++ = *buf32++;
 +                *cr++    = *buf32++;
 +                *cb++    = *buf32++;
              }
          }
          break;
  
      case 1:
          /* Fraps v1 is an upside-down BGR24 */
 -        if (!prev_pic_bit)
 -            expected_size += avctx->width * avctx->height * 3;
 -        if (buf_size != expected_size) {
 -            av_log(avctx, AV_LOG_ERROR,
 -                   "Invalid frame length %d (should be %d)\n",
 -                   buf_size, expected_size);
 -            return AVERROR_INVALIDDATA;
 -        }
 -
 -        f->reference = 1;
 -        f->buffer_hints = FF_BUFFER_HINTS_VALID |
 -                          FF_BUFFER_HINTS_PRESERVE |
 -                          FF_BUFFER_HINTS_REUSABLE;
 -        if (avctx->reget_buffer(avctx, f)) {
 -            av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
 -            return -1;
 -        }
 -        f->pict_type = prev_pic_bit ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
 -        f->key_frame = f->pict_type == AV_PICTURE_TYPE_I;
 -
 -        if (f->pict_type == AV_PICTURE_TYPE_I) {
--            for(y=0; y<avctx->height; y++)
--                memcpy(&f->data[0][ (avctx->height - y -1) * f->linesize[0]],
--                       &buf[y*avctx->width*3],
--                       3*avctx->width);
 -        }
++            for (y = 0; y < avctx->height; y++)
++                memcpy(&f->data[0][ (avctx->height - y - 1) * f->linesize[0]],
++                       &buf[y * avctx->width * 3],
++                       3 * avctx->width);
          break;
  
      case 2:
@@@ -962,7 -956,8 +962,8 @@@ static av_cold int svq3_decode_init(AVC
                  int offset                = get_bits_count(&gb) + 7 >> 3;
                  uint8_t *buf;
  
-                 if (watermark_height <= 0 || (uint64_t)watermark_width*4 > UINT_MAX/watermark_height)
 -                if (watermark_height > 0 &&
++                if (watermark_height <= 0 ||
+                     (uint64_t)watermark_width * 4 > UINT_MAX / watermark_height)
                      return -1;
  
                  buf = av_malloc(buf_len);
@@@ -1148,6 -1147,6 +1147,7 @@@ static av_cold int twin_decode_init(AVC
          return AVERROR_INVALIDDATA;
      }
  
++
      switch ((isampf << 8) +  ibps) {
      case (8 <<8) +  8: tctx->mtab = &mode_08_08; break;
      case (11<<8) +  8: tctx->mtab = &mode_11_08; break;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge