[FFmpeg-devel] [PATCH] avfilter/avfilter: check for allocation failure in ff_insert_pad()
Stefano Sabatini
stefasab at gmail.com
Sun Sep 15 10:45:53 CEST 2013
On date Saturday 2013-09-14 10:34:56 +0000, Paul B Mahol encoded:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
> libavfilter/avfilter.c | 17 ++++++++++++++---
> libavfilter/internal.h | 13 ++++++++-----
> 2 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> index 765b37a..83d942c 100644
> --- a/libavfilter/avfilter.c
> +++ b/libavfilter/avfilter.c
> @@ -94,16 +94,25 @@ void ff_command_queue_pop(AVFilterContext *filter)
> av_free(c);
> }
>
> -void ff_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
> +int ff_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
> AVFilterPad **pads, AVFilterLink ***links,
> AVFilterPad *newpad)
> {
> + AVFilterLink **newlinks;
> + AVFilterPad *newpads;
> unsigned i;
>
> idx = FFMIN(idx, *count);
>
> - *pads = av_realloc(*pads, sizeof(AVFilterPad) * (*count + 1));
> - *links = av_realloc(*links, sizeof(AVFilterLink*) * (*count + 1));
> + newpads = av_realloc_array(*pads, *count + 1, sizeof(AVFilterPad));
> + newlinks = av_realloc_array(*links, *count + 1, sizeof(AVFilterLink*));
> + if (newpads)
> + *pads = newpads;
> + if (newlinks)
> + *links = newlinks;
> + if (!newpads || !newlinks)
> + return AVERROR(ENOMEM);
> +
> memmove(*pads + idx + 1, *pads + idx, sizeof(AVFilterPad) * (*count - idx));
> memmove(*links + idx + 1, *links + idx, sizeof(AVFilterLink*) * (*count - idx));
> memcpy(*pads + idx, newpad, sizeof(AVFilterPad));
> @@ -113,6 +122,8 @@ void ff_insert_pad(unsigned idx, unsigned *count, size_t padidx_off,
> for (i = idx + 1; i < *count; i++)
> if (*links[i])
> (*(unsigned *)((uint8_t *) *links[i] + padidx_off))++;
> +
> + return 0;
> }
>
> int avfilter_link(AVFilterContext *src, unsigned srcpad,
> diff --git a/libavfilter/internal.h b/libavfilter/internal.h
> index eede4f7..e1bb2b3 100644
> --- a/libavfilter/internal.h
> +++ b/libavfilter/internal.h
> @@ -249,35 +249,38 @@ void ff_tlog_link(void *ctx, AVFilterLink *link, int end);
> * @param pads Pointer to the pointer to the beginning of the list of pads
> * @param links Pointer to the pointer to the beginning of the list of links
> * @param newpad The new pad to add. A copy is made when adding.
> + * @return 0 in case of success, a negative AVERROR code on error
return >= 0 in case of success, ...
this way it should be easier to extend it later if need arises
--
FFmpeg = Forgiving & Formidable Magic Perennial Elfic Geisha
More information about the ffmpeg-devel
mailing list