Merge commit 'a0a90b1a1116250a2494021da810cc5da89ea36f' into release/0.10
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 3 Jun 2014 00:27:34 +0000 (02:27 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 3 Jun 2014 00:27:34 +0000 (02:27 +0200)
* commit 'a0a90b1a1116250a2494021da810cc5da89ea36f':
  tiffdec: use bytestream2 to simplify overread/overwrite protection

Conflicts:
libavcodec/tiff.c

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

@@@ -102,49 -102,9 +101,49 @@@ static int tiff_uncompress(uint8_t *dst
  }
  #endif
  
 +static void av_always_inline horizontal_fill(unsigned int bpp, uint8_t* dst,
 +                                             int usePtr, const uint8_t *src,
 +                                             uint8_t c, int width, int offset)
 +{
 +    switch (bpp) {
 +    case 1:
 +        while (--width >= 0) {
 +            dst[(width+offset)*8+7] = (usePtr ? src[width] : c)      & 0x1;
 +            dst[(width+offset)*8+6] = (usePtr ? src[width] : c) >> 1 & 0x1;
 +            dst[(width+offset)*8+5] = (usePtr ? src[width] : c) >> 2 & 0x1;
 +            dst[(width+offset)*8+4] = (usePtr ? src[width] : c) >> 3 & 0x1;
 +            dst[(width+offset)*8+3] = (usePtr ? src[width] : c) >> 4 & 0x1;
 +            dst[(width+offset)*8+2] = (usePtr ? src[width] : c) >> 5 & 0x1;
 +            dst[(width+offset)*8+1] = (usePtr ? src[width] : c) >> 6 & 0x1;
 +            dst[(width+offset)*8+0] = (usePtr ? src[width] : c) >> 7;
 +        }
 +        break;
 +    case 2:
 +        while (--width >= 0) {
 +            dst[(width+offset)*4+3] = (usePtr ? src[width] : c) & 0x3;
 +            dst[(width+offset)*4+2] = (usePtr ? src[width] : c) >> 2 & 0x3;
 +            dst[(width+offset)*4+1] = (usePtr ? src[width] : c) >> 4 & 0x3;
 +            dst[(width+offset)*4+0] = (usePtr ? src[width] : c) >> 6;
 +        }
 +        break;
 +    case 4:
 +        while (--width >= 0) {
 +            dst[(width+offset)*2+1] = (usePtr ? src[width] : c) & 0xF;
 +            dst[(width+offset)*2+0] = (usePtr ? src[width] : c) >> 4;
 +        }
 +        break;
 +    default:
 +        if (usePtr) {
 +            memcpy(dst + offset, src, width);
 +        } else {
 +            memset(dst + offset, c, width);
 +        }
 +    }
 +}
 +
  static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uint8_t *src, int size, int lines){
+     PutByteContext pb;
      int c, line, pixels, code;
-     const uint8_t *ssrc = src;
      int width = ((s->width * s->bpp) + 7) >> 3;
  #if CONFIG_ZLIB
      uint8_t *zbuf; unsigned long outlen;
@@@ -496,18 -411,7 +469,14 @@@ static int tiff_decode_tag(TiffContext 
          }
          s->strips = count;
          s->sstype = type;
-         if(s->stripsizes > end_buf){
-             av_log(s->avctx, AV_LOG_ERROR, "Tag referencing position outside the image\n");
-             return -1;
-         }
          break;
 +    case TIFF_TILE_BYTE_COUNTS:
 +    case TIFF_TILE_LENGTH:
 +    case TIFF_TILE_OFFSETS:
 +    case TIFF_TILE_WIDTH:
 +        av_log(s->avctx, AV_LOG_ERROR, "Tiled images are not supported\n");
 +        return AVERROR_PATCHWELCOME;
 +        break;
      case TIFF_PREDICTOR:
          s->predictor = value;
          break;