avcodec/cngdec: Check skip_samples
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>
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include "libavutil/common.h"
|
#include "libavutil/common.h"
|
||||||
#include "libavutil/ffmath.h"
|
#include "libavutil/ffmath.h"
|
||||||
|
#include "libavutil/intreadwrite.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "celp_filters.h"
|
#include "celp_filters.h"
|
||||||
#include "internal.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) {
|
if (p->inited) {
|
||||||
p->energy = p->energy / 2 + p->target_energy / 2;
|
p->energy = p->energy / 2 + p->target_energy / 2;
|
||||||
for (i = 0; i < p->order; i++)
|
for (i = 0; i < p->order; i++)
|
||||||
|
Reference in New Issue
Block a user