avfilter/af_headphone: fix memory leak and overread
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
8daca7697b
commit
a56580b117
@ -747,15 +747,19 @@ static int request_frame(AVFilterLink *outlink)
|
|||||||
ret = ff_request_frame(ctx->inputs[0]);
|
ret = ff_request_frame(ctx->inputs[0]);
|
||||||
if (ret == AVERROR_EOF && av_audio_fifo_size(s->in[0].fifo) > 0 && s->have_hrirs) {
|
if (ret == AVERROR_EOF && av_audio_fifo_size(s->in[0].fifo) > 0 && s->have_hrirs) {
|
||||||
int nb_samples = av_audio_fifo_size(s->in[0].fifo);
|
int nb_samples = av_audio_fifo_size(s->in[0].fifo);
|
||||||
AVFrame *in = ff_get_audio_buffer(outlink, s->size - nb_samples);
|
AVFrame *in = ff_get_audio_buffer(ctx->inputs[0], s->size - nb_samples);
|
||||||
|
|
||||||
|
if (!in)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
|
||||||
av_samples_set_silence(in->extended_data, 0,
|
av_samples_set_silence(in->extended_data, 0,
|
||||||
in->nb_samples,
|
in->nb_samples,
|
||||||
outlink->channels,
|
in->channels,
|
||||||
outlink->format);
|
in->format);
|
||||||
|
|
||||||
ret = av_audio_fifo_write(s->in[0].fifo, (void **)in->extended_data,
|
ret = av_audio_fifo_write(s->in[0].fifo, (void **)in->extended_data,
|
||||||
in->nb_samples);
|
in->nb_samples);
|
||||||
|
av_frame_free(&in);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ret = headphone_frame(s, outlink, nb_samples);
|
ret = headphone_frame(s, outlink, nb_samples);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user