summaryrefslogtreecommitdiff
path: root/libavfilter/af_amerge.c
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2013-01-31 14:24:57 +0100
committerNicolas George <nicolas.george@normalesup.org>2013-01-31 21:03:54 +0100
commitae14887ee7f2a2c02957845b84afd711cf702b9b (patch)
treef56b8d16d96cad735a5214d4923141871ee2983f /libavfilter/af_amerge.c
parent6560625f0aeca470ac936542fcc24ed2da8eff5e (diff)
lavfi/af_amerge: check for buffer queue overflows.
Without that test, ff_bufqueue_add silently discards the oldest buffer, that leaves in[i].nb_samples inconsistent, and causes later a segfault.
Diffstat (limited to 'libavfilter/af_amerge.c')
-rw-r--r--libavfilter/af_amerge.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index 44b71e4acb..e55268259e 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -231,6 +231,11 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *insamples)
if (inlink == ctx->inputs[input_number])
break;
av_assert1(input_number < am->nb_inputs);
+ if (ff_bufqueue_is_full(&am->in[input_number].queue)) {
+ av_log(ctx, AV_LOG_ERROR, "Buffer queue overflow\n");
+ avfilter_unref_buffer(insamples);
+ return AVERROR(ENOMEM);
+ }
ff_bufqueue_add(ctx, &am->in[input_number].queue, insamples);
am->in[input_number].nb_samples += insamples->audio->nb_samples;
nb_samples = am->in[0].nb_samples;