[FFmpeg-devel] [PATCH 18/40] avcodec/alacenc: Don't free unnecessarily

Paul B Mahol onemda at gmail.com
Mon Sep 14 19:32:37 EEST 2020


On Mon, Sep 14, 2020 at 07:27:25AM +0200, Andreas Rheinhardt wrote:
> The init function of the ALAC encoder calls its own close function
> if a call to ff_lpc_init() fails; yet nothing has been allocated before
> that point (except extradata which is freed generically) and ff_lpc_init()
> can be expected to clean up after itself on error (the documentation does
> not say anything to the contrary and the current implementation can only
> fail if the only allocation fails, so there is nothing to clean up on
> error anyway), so this is unnecessary.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
>  libavcodec/alacenc.c | 20 ++++++--------------
>  1 file changed, 6 insertions(+), 14 deletions(-)
> 

what about adding cleanup flag so if new stuff is added(unlikely) new bugs
wont pop up?

> diff --git a/libavcodec/alacenc.c b/libavcodec/alacenc.c
> index fc5fa270e6..9d135d1350 100644
> --- a/libavcodec/alacenc.c
> +++ b/libavcodec/alacenc.c
> @@ -535,10 +535,8 @@ static av_cold int alac_encode_init(AVCodecContext *avctx)
>                                                   avctx->bits_per_raw_sample);
>  
>      avctx->extradata = av_mallocz(ALAC_EXTRADATA_SIZE + AV_INPUT_BUFFER_PADDING_SIZE);
> -    if (!avctx->extradata) {
> -        ret = AVERROR(ENOMEM);
> -        goto error;
> -    }
> +    if (!avctx->extradata)
> +        return AVERROR(ENOMEM);
>      avctx->extradata_size = ALAC_EXTRADATA_SIZE;
>  
>      alac_extradata = avctx->extradata;
> @@ -566,8 +564,7 @@ FF_DISABLE_DEPRECATION_WARNINGS
>             avctx->min_prediction_order > ALAC_MAX_LPC_ORDER) {
>              av_log(avctx, AV_LOG_ERROR, "invalid min prediction order: %d\n",
>                     avctx->min_prediction_order);
> -            ret = AVERROR(EINVAL);
> -            goto error;
> +            return AVERROR(EINVAL);
>          }
>  
>          s->min_prediction_order = avctx->min_prediction_order;
> @@ -578,8 +575,7 @@ FF_DISABLE_DEPRECATION_WARNINGS
>              avctx->max_prediction_order > ALAC_MAX_LPC_ORDER) {
>              av_log(avctx, AV_LOG_ERROR, "invalid max prediction order: %d\n",
>                     avctx->max_prediction_order);
> -            ret = AVERROR(EINVAL);
> -            goto error;
> +            return AVERROR(EINVAL);
>          }
>  
>          s->max_prediction_order = avctx->max_prediction_order;
> @@ -591,8 +587,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          av_log(avctx, AV_LOG_ERROR,
>                 "invalid prediction orders: min=%d max=%d\n",
>                 s->min_prediction_order, s->max_prediction_order);
> -        ret = AVERROR(EINVAL);
> -        goto error;
> +        return AVERROR(EINVAL);
>      }
>  
>      s->avctx = avctx;
> @@ -600,13 +595,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
>      if ((ret = ff_lpc_init(&s->lpc_ctx, avctx->frame_size,
>                             s->max_prediction_order,
>                             FF_LPC_TYPE_LEVINSON)) < 0) {
> -        goto error;
> +        return ret;
>      }
>  
>      return 0;
> -error:
> -    alac_encode_close(avctx);
> -    return ret;
>  }
>  
>  static int alac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
> -- 
> 2.25.1
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list