avcodec/pictordec: Do not read more than nb_planes
authorMichael Niedermayer <michael@niedermayer.cc>
Mon, 20 Feb 2017 11:31:43 +0000 (12:31 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Mon, 20 Feb 2017 16:14:54 +0000 (17:14 +0100)
Fixes undefined behavior
Fixes: 622/clusterfuzz-testcase-5745722022428672

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/targets/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/pictordec.c

index 0cfc785..a3d72e3 100644 (file)
@@ -80,7 +80,7 @@ static void picmemset(PicContext *s, AVFrame *frame, int value, int run,
                    value <<= bits_per_plane;
                    mask  <<= bits_per_plane;
                    if (*plane >= s->nb_planes)
-                       break;
+                       return;
                 }
             }
         }
@@ -236,7 +236,7 @@ static int decode_frame(AVCodecContext *avctx,
             }
         }
 
-        if (x < avctx->width) {
+        if (plane < s->nb_planes && x < avctx->width) {
             int run = (y + 1) * avctx->width - x;
             if (bits_per_plane == 8)
                 picmemset_8bpp(s, frame, val, run, &x, &y);