diff mbox

[FFmpeg-devel,3/3] avcodec/cngdec: Check skip_samples

Message ID 20170817221735.24154-3-michael@niedermayer.cc
State Accepted
Commit e7b9d136a1ba2d048b1a17df5778e426b825676d
Headers show

Commit Message

Michael Niedermayer Aug. 17, 2017, 10:17 p.m. UTC
Without this its possible to make the new decode API decode billions of samples
out of a empty input and never return to the caller before all samples have been
created and discarded.

Fixes: Timeout
Fixes: 2992/clusterfuzz-testcase-6649611793989632

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/cngdec.c | 6 ++++++
 1 file changed, 6 insertions(+)
diff mbox

Patch

diff --git a/libavcodec/cngdec.c b/libavcodec/cngdec.c
index 34f881448d..1e884f3c33 100644
--- a/libavcodec/cngdec.c
+++ b/libavcodec/cngdec.c
@@ -23,6 +23,7 @@ 
 
 #include "libavutil/common.h"
 #include "libavutil/ffmath.h"
+#include "libavutil/intreadwrite.h"
 #include "avcodec.h"
 #include "celp_filters.h"
 #include "internal.h"
@@ -120,6 +121,11 @@  static int cng_decode_frame(AVCodecContext *avctx, void *data,
         }
     }
 
+    if (avctx->internal->skip_samples > 10 * avctx->frame_size) {
+        avctx->internal->skip_samples = 0;
+        return AVERROR_INVALIDDATA;
+    }
+
     if (p->inited) {
         p->energy = p->energy / 2 + p->target_energy / 2;
         for (i = 0; i < p->order; i++)