[FFmpeg-devel] [PATCH] avcodec/ass: Fix a memory leak defect.

Hendrik Leppkes h.leppkes at gmail.com
Mon Feb 12 16:21:13 EET 2018


On Mon, Feb 12, 2018 at 1:56 PM, Gang Fan(范刚) <fan.gang.cn at gmail.com> wrote:
> Thanks to Hendrik
> Here is the new patch:
>
> From 642a413080f20f9515321e42056248e86e003997 Mon Sep 17 00:00:00 2001
> From: Fan Gang <fangang at sbrella.com>
> Date: Mon, 12 Feb 2018 20:55:06 +0800
> Subject: [PATCH] avcodec/ass: Fix a memory leak defect when realloc fails.
>
> ---
>  libavcodec/ass_split.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/libavcodec/ass_split.c b/libavcodec/ass_split.c
> index 872528b..eebe239 100644
> --- a/libavcodec/ass_split.c
> +++ b/libavcodec/ass_split.c
> @@ -249,7 +249,7 @@ static const char *ass_split_section(ASSSplitContext
> *ctx, const char *buf)
>      const ASSSection *section = &ass_sections[ctx->current_section];
>      int *number = &ctx->field_number[ctx->current_section];
>      int *order = ctx->field_order[ctx->current_section];
> -    int *tmp, i, len;
> +    int i, len;
>
>      while (buf && *buf) {
>          if (buf[0] == '[') {
> @@ -280,9 +280,7 @@ static const char *ass_split_section(ASSSplitContext
> *ctx, const char *buf)
>                  while (!is_eol(*buf)) {
>                      buf = skip_space(buf);
>                      len = strcspn(buf, ", \r\n");
> -                    if (!(tmp = av_realloc_array(order, (*number + 1),
> sizeof(*order))))
> -                        return NULL;
> -                    order = tmp;
> +                    av_reallocp_array(&order, (*number + 1),
> sizeof(*order));
>                      order[*number] = -1;
>                      for (i=0; section->fields[i].name; i++)
>                          if (!strncmp(buf, section->fields[i].name, len)) {
> --
> 1.9.1
>
>

Allocation can still fail, so you shouldn't remove the check - just
need to change it, since it returns 0 for success, negative for
failure.

- Hendrik


More information about the ffmpeg-devel mailing list