Browse code

avcodec/tiff: Make pixel format checks tighter

Fixes assertion failure with imgsrc001-lzma.tiff

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2014/08/24 08:54:45
Showing 1 changed files
... ...
@@ -490,7 +490,9 @@ static int tiff_unpack_strip(TiffContext *s, AVFrame *p, uint8_t *dst, int strid
490 490
     const uint8_t *ssrc = src;
491 491
     int width = ((s->width * s->bpp) + 7) >> 3;
492 492
     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(p->format);
493
-    int is_yuv = !(desc->flags & AV_PIX_FMT_FLAG_RGB) && desc->nb_components >= 2;
493
+    int is_yuv = !(desc->flags & AV_PIX_FMT_FLAG_RGB) &&
494
+                 (desc->flags & AV_PIX_FMT_FLAG_PLANAR) &&
495
+                 desc->nb_components >= 3;
494 496
 
495 497
     if (s->planar)
496 498
         width /= s->bppcount;
... ...
@@ -723,7 +725,9 @@ static int init_image(TiffContext *s, ThreadFrame *frame)
723 723
 
724 724
     if (s->photometric == TIFF_PHOTOMETRIC_YCBCR) {
725 725
         const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->avctx->pix_fmt);
726
-        if((desc->flags & AV_PIX_FMT_FLAG_RGB) || desc->nb_components < 3) {
726
+        if((desc->flags & AV_PIX_FMT_FLAG_RGB) ||
727
+           !(desc->flags & AV_PIX_FMT_FLAG_PLANAR) ||
728
+           desc->nb_components < 3) {
727 729
             av_log(s->avctx, AV_LOG_ERROR, "Unsupported YCbCr variant\n");
728 730
             return AVERROR_INVALIDDATA;
729 731
         }