Merge commit 'b8b809908ec547b2609dbac24194f4fd2df61aea'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 13 Jun 2013 10:21:36 +0000 (12:21 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 13 Jun 2013 10:24:00 +0000 (12:24 +0200)
* commit 'b8b809908ec547b2609dbac24194f4fd2df61aea':
  4xm: forward errors from decode_p_block

Conflicts:
libavcodec/4xm.c

Impossible to be false check has been replaced by av_assert0()

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/4xm.c

@@@ -343,18 -341,16 +343,19 @@@ static int decode_p_block(FourXContext 
                                 BLOCK_TYPE_VLC_BITS, 1);
      uint16_t *start = (uint16_t *)f->last_picture->data[0];
      uint16_t *end   = start + stride * (f->avctx->height - h + 1) - (1 << log2w);
+     int ret;
  
-     av_assert2(code >= 0 && code <= 6);
 -    if (code < 0 || code > 6)
 -        return AVERROR_INVALIDDATA;
++    av_assert0(code >= 0 && code <= 6);
  
      if (code == 0) {
 -        src += f->mv[bytestream2_get_byte(&f->g)];
 +        if (bytestream2_get_bytes_left(&f->g) < 1) {
 +            av_log(f->avctx, AV_LOG_ERROR, "bytestream overread\n");
-             return;
++            return AVERROR_INVALIDDATA;
 +        }
 +        src += f->mv[bytestream2_get_byteu(&f->g)];
          if (start > src || src > end) {
              av_log(f->avctx, AV_LOG_ERROR, "mv out of pic\n");
-             return;
+             return AVERROR_INVALIDDATA;
          }
          mcdc(dst, src, log2w, h, stride, 1, 0);
      } else if (code == 1) {
      } else if (code == 3 && f->version < 2) {
          mcdc(dst, src, log2w, h, stride, 1, 0);
      } else if (code == 4) {
 -        src += f->mv[bytestream2_get_byte(&f->g)];
 +        if (bytestream2_get_bytes_left(&f->g) < 1) {
 +            av_log(f->avctx, AV_LOG_ERROR, "bytestream overread\n");
-             return;
++            return AVERROR_INVALIDDATA;
 +        }
 +        src += f->mv[bytestream2_get_byteu(&f->g)];
          if (start > src || src > end) {
              av_log(f->avctx, AV_LOG_ERROR, "mv out of pic\n");
-             return;
+             return AVERROR_INVALIDDATA;
          }
 -        mcdc(dst, src, log2w, h, stride, 1, bytestream2_get_le16(&f->g2));
 +        if (bytestream2_get_bytes_left(&f->g2) < 2){
 +            av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
-             return;
++            return AVERROR_INVALIDDATA;
 +        }
 +        mcdc(dst, src, log2w, h, stride, 1, bytestream2_get_le16u(&f->g2));
      } else if (code == 5) {
 -        mcdc(dst, src, log2w, h, stride, 0, bytestream2_get_le16(&f->g2));
 +        if (bytestream2_get_bytes_left(&f->g2) < 2) {
 +            av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
-             return;
++            return AVERROR_INVALIDDATA;
 +        }
 +        mcdc(dst, src, log2w, h, stride, 0, bytestream2_get_le16u(&f->g2));
      } else if (code == 6) {
-             return;
 +        if (bytestream2_get_bytes_left(&f->g2) < 4) {
 +            av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
++            return AVERROR_INVALIDDATA;
 +        }
          if (log2w) {
 -            dst[0]      = bytestream2_get_le16(&f->g2);
 -            dst[1]      = bytestream2_get_le16(&f->g2);
 +            dst[0]      = bytestream2_get_le16u(&f->g2);
 +            dst[1]      = bytestream2_get_le16u(&f->g2);
          } else {
 -            dst[0]      = bytestream2_get_le16(&f->g2);
 -            dst[stride] = bytestream2_get_le16(&f->g2);
 +            dst[0]      = bytestream2_get_le16u(&f->g2);
 +            dst[stride] = bytestream2_get_le16u(&f->g2);
          }
      }
+     return 0;
  }
  
  static int decode_p_frame(FourXContext *f, AVFrame *frame,