Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 11 Mar 2012 00:12:52 +0000 (01:12 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 11 Mar 2012 00:12:52 +0000 (01:12 +0100)
* qatar/master:
  cook: expand dither_tab[], and make sure indexes into it don't overflow.
  xxan: reindent xan_unpack_luma().
  xxan: protect against chroma LUT overreads.
  xxan: convert to bytestream2 API.
  xxan: don't read before start of buffer in av_memcpy_backptr().
  vp8: convert mbedge loopfilter x86 assembly to use named arguments.
  vp8: convert inner loopfilter x86 assembly to use named arguments.

Conflicts:
libavcodec/xxan.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/cook.c
libavcodec/cookdata.h
libavcodec/x86/vp8dsp.asm
libavcodec/xxan.c

Simple merge
Simple merge
Simple merge
@@@ -198,12 -197,8 +197,12 @@@ static int xan_decode_chroma(AVCodecCon
      if (mode) {
          for (j = 0; j < avctx->height >> 1; j++) {
              for (i = 0; i < avctx->width >> 1; i++) {
 +                if (src_end - src < 1)
 +                    return 0;
                  val = *src++;
 -                if (val && val < table_size) {
 +                if (val) {
-                     if (val << 1 >= table_size)
++                    if (val >= table_size)
 +                        return AVERROR_INVALIDDATA;
                      val  = AV_RL16(table + (val << 1));
                      uval = (val >> 3) & 0xF8;
                      vval = (val >> 8) & 0xF8;
  
          for (j = 0; j < avctx->height >> 2; j++) {
              for (i = 0; i < avctx->width >> 1; i += 2) {
 +                if (src_end - src < 1)
 +                    return 0;
                  val = *src++;
 -                if (val && val < table_size) {
 +                if (val) {
-                     if (val << 1 >= table_size)
++                    if (val >= table_size)
 +                        return AVERROR_INVALIDDATA;
                      val  = AV_RL16(table + (val << 1));
                      uval = (val >> 3) & 0xF8;
                      vval = (val >> 8) & 0xF8;
@@@ -304,17 -292,13 +298,16 @@@ static int xan_decode_frame_type0(AVCod
      if (corr_off) {
          int corr_end, dec_size;
  
-         corr_end = avpkt->size;
+         corr_end = (s->gb.buffer_end - s->gb.buffer_start);
          if (chroma_off > corr_off)
              corr_end = chroma_off;
-         dec_size = xan_unpack(s->scratch_buffer, s->buffer_size,
-                               avpkt->data + 8 + corr_off,
-                               corr_end - corr_off);
+         bytestream2_seek(&s->gb, 8 + corr_off, SEEK_SET);
+         dec_size = xan_unpack(s, s->scratch_buffer, s->buffer_size);
          if (dec_size < 0)
              dec_size = 0;
 +        else
 +            dec_size = FFMIN(dec_size, s->buffer_size/2 - 1);
 +
          for (i = 0; i < dec_size; i++)
              s->y_buffer[i*2+1] = (s->y_buffer[i*2+1] + (s->scratch_buffer[i] << 1)) & 0x3F;
      }