[FFmpeg-devel] [PATCH 2/3] avformat/mxfdec: Fix memleak when parsing tag fails

Tomas Härdin tjoppen at acc.umu.se
Wed Jul 22 15:39:13 EEST 2020


mån 2020-07-20 klockan 08:15 +0200 skrev Andreas Rheinhardt:
> --- a/libavformat/mxfdec.c
> +++ b/libavformat/mxfdec.c
> @@ -2714,6 +2714,7 @@ static const MXFMetadataReadTableEntry mxf_metadata_read_table[] = {
>  
>  static int mxf_metadataset_init(MXFMetadataSet *ctx, enum MXFMetadataSetType type)
>  {
> +    ctx->type = type;
>      switch (type){
>      case MultipleDescriptor:
>      case Descriptor:
> @@ -2734,7 +2735,8 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
>  
>      if (!ctx)
>          return AVERROR(ENOMEM);
> -    mxf_metadataset_init(ctx, type);
> +    if (ctx_size)
> +        mxf_metadataset_init(ctx, type);
>      while (avio_tell(pb) + 4 < klv_end && !avio_feof(pb)) {
>          int ret;
>          int tag = avio_rb16(pb);
> @@ -2770,7 +2772,6 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
>           * it extending past the end of the KLV though (zzuf5.mxf). */
>          if (avio_tell(pb) > klv_end) {
>              if (ctx_size) {
> -                ctx->type = type;
>                  mxf_free_metadataset(&ctx, 1);
>              }
>  
> @@ -2781,7 +2782,6 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
>          } else if (avio_tell(pb) <= next)   /* only seek forward, else this can loop for a long time */
>              avio_seek(pb, next, SEEK_SET);
>      }
> -    if (ctx_size) ctx->type = type;

Looks OK as far as I can tell. It's been a while since I dug into
mxfdec's type system.

/Tomas



More information about the ffmpeg-devel mailing list