avcodec/qpeg: Optimize full width runs in qpeg_decode_intra()
authorMichael Niedermayer <michael@niedermayer.cc>
Mon, 5 Nov 2018 21:46:43 +0000 (22:46 +0100)
committerMichael Niedermayer <michael@niedermayer.cc>
Thu, 8 Nov 2018 21:40:46 +0000 (22:40 +0100)
This improves the speed of decoding large patches of constant color

Fixes: Timeout
Fixes: 10967/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_QPEG_fuzzer-5630803793936384

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

index e1210c1..cb45262 100644 (file)
@@ -85,6 +85,12 @@ static void qpeg_decode_intra(QpegContext *qctx, uint8_t *dst,
                     filled = 0;
                     dst -= stride;
                     rows_to_go--;
+                    while (run - i > width && rows_to_go > 0) {
+                        memset(dst, p, width);
+                        dst -= stride;
+                        rows_to_go--;
+                        i += width;
+                    }
                     if(rows_to_go <= 0)
                         break;
                 }