From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 3FE96497F0 for ; Mon, 19 Feb 2024 21:56:02 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CED8368D40D; Mon, 19 Feb 2024 23:55:59 +0200 (EET) Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D2C9068D26D for ; Mon, 19 Feb 2024 23:55:52 +0200 (EET) Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-6e0f803d9dfso2337252b3a.0 for ; Mon, 19 Feb 2024 13:55:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708379750; x=1708984550; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=qczdJTDzIZCN7JgzeL4rV9vCNRhLfjWdm0Xq2H9oCmk=; b=EmsB10LOFfXsg1bROX1CP2iuQeEZsGcqr8SMlr8+IEMoxJldU11drR3Sl1BzP8Wzwx 4sskbeA9jw2dMf9zleomv9tquKTcmNIwhqm/3XdZVk+1WpcM+0U/gKpUhkacDgPBXc6X 4ffuZXr0OQnEAQMX5IWFftZy86rHUWe30ElFknD3WgTHJQPNgT2DwQipamG4+V0Mz/l7 AFs7x3TZoA4lbbk27c7yrr3m5ChBP0oImG3W97ZLt4rDFSQvL4Uisyy1yct0RrQefjyi Dl/4PHrrrZ6od4JBJF7gtGzQLOjU/pH9odJileRQOZLWkaBkeFlvEI+YJkNZXZoAPZrP 9ezg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708379750; x=1708984550; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qczdJTDzIZCN7JgzeL4rV9vCNRhLfjWdm0Xq2H9oCmk=; b=AIHlAKedt7bBvUgU1OeUlU42mTseS5rV4WO4eU3d4SrVCwv3DyAUswmOPkFC6avyTa GYnUIigvKxNiAMoZgoYVndeEbGLmr5wKJBXL8/oycyB/7Dz7opPI5n0FBykzBJrlGJj0 jbacUPxC4MU8xaLS73P+G9MURbW85EAGi6B4rVquSe+JUe26wIGAWRFW4kc/zetbemoD Y/tlWisKFycyeFP0o6+aLwthOgdRzdXI3zoZ4qpfozNEGAxqawOze7mTs+aQ4ysyPUfK Klh0oX2mCJdH0y/oovX9uhf+raLj5Qwk3IEeSxc1BvyujoQOK0/02nrjhvBCqa+LSA5g Fi5w== X-Gm-Message-State: AOJu0Yzj/MEw7jqKfupHLDt7CPuo8BkoMpsDiYcqUTzUDqhXvSI8Brjw 4EWmxV/NIiAYctlIfUdK6sHmDb1S62GOdKBiPfoyXD0RMjs3FCp5C7IopxX6 X-Google-Smtp-Source: AGHT+IFCFzYZm1WJzDeK9gHlcUs3eKSkrpRNIJSV+Qy7c4RSPgdcKUeRqfEWZB9aaW8bDPYQagjx0g== X-Received: by 2002:a05:6a20:c90c:b0:1a0:5f8b:2cad with SMTP id gx12-20020a056a20c90c00b001a05f8b2cadmr16539942pzb.13.1708379749990; Mon, 19 Feb 2024 13:55:49 -0800 (PST) Received: from [192.168.0.16] ([190.194.169.124]) by smtp.gmail.com with ESMTPSA id fa19-20020a056a002d1300b006e462d99a9esm2529465pfb.143.2024.02.19.13.55.48 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 Feb 2024 13:55:49 -0800 (PST) Message-ID: <6819fbe8-7239-4890-bb9f-a40e35520613@gmail.com> Date: Mon, 19 Feb 2024 18:55:52 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: Content-Language: en-US From: James Almer In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH 5/5] avformat/iamf_writer: Fix leaks on error X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 2/19/2024 6:52 PM, Andreas Rheinhardt wrote: > Fixes Coverity issues #1559544 and #1559547. > > Signed-off-by: Andreas Rheinhardt > --- > libavformat/iamf_writer.c | 42 +++++++++++++++++++++++++++------------ > 1 file changed, 29 insertions(+), 13 deletions(-) > > diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c > index e8a88b44c3..f6ebb4aaea 100644 > --- a/libavformat/iamf_writer.c > +++ b/libavformat/iamf_writer.c > @@ -240,12 +240,12 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void > > audio_element->substreams = av_calloc(stg->nb_streams, sizeof(*audio_element->substreams)); > if (!audio_element->substreams) > - return AVERROR(ENOMEM); > + goto fail_enomem; > audio_element->nb_substreams = stg->nb_streams; > > audio_element->layers = av_calloc(iamf_audio_element->nb_layers, sizeof(*audio_element->layers)); > if (!audio_element->layers) > - return AVERROR(ENOMEM); > + goto fail_enomem; > > for (int i = 0, j = 0; i < iamf_audio_element->nb_layers; i++) { > int nb_channels = iamf_audio_element->layers[i]->ch_layout.nb_channels; > @@ -266,7 +266,8 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void > if (nb_channels) { > av_log(log_ctx, AV_LOG_ERROR, "Invalid channel count across substreams in layer %u from stream group %u\n", > i, stg->index); > - return AVERROR(EINVAL); > + ret = AVERROR(EINVAL); > + goto fail; > } > } > > @@ -276,13 +277,14 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void > > if (param->nb_subblocks != 1) { > av_log(log_ctx, AV_LOG_ERROR, "nb_subblocks in demixing_info for stream group %u is not 1\n", stg->index); > - return AVERROR(EINVAL); > + ret = AVERROR(EINVAL); > + goto fail; > } > > if (!param_definition) { > param_definition = add_param_definition(iamf, param, audio_element, log_ctx); > if (!param_definition) > - return AVERROR(ENOMEM); > + goto fail_enomem; > } > } > if (iamf_audio_element->recon_gain_info) { > @@ -291,29 +293,36 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void > > if (param->nb_subblocks != 1) { > av_log(log_ctx, AV_LOG_ERROR, "nb_subblocks in recon_gain_info for stream group %u is not 1\n", stg->index); > - return AVERROR(EINVAL); > + ret = AVERROR(EINVAL); > + goto fail; > } > > if (!param_definition) { > param_definition = add_param_definition(iamf, param, audio_element, log_ctx); > if (!param_definition) > - return AVERROR(ENOMEM); > + goto fail_enomem; > } > } > > tmp = av_realloc_array(iamf->audio_elements, iamf->nb_audio_elements + 1, sizeof(*iamf->audio_elements)); > if (!tmp) > - return AVERROR(ENOMEM); > + goto fail_enomem; > > iamf->audio_elements = tmp; > iamf->audio_elements[iamf->nb_audio_elements++] = audio_element; > > return 0; > +fail_enomem: I prefer setting ret to ENOMEM before goto fail instead of adding a second label for this. > + ret = AVERROR(ENOMEM); > +fail: > + ff_iamf_free_audio_element(&audio_element); > + return ret; > } > > int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx) > { > IAMFMixPresentation **tmp, *mix_presentation; > + int ret; > > if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION) > return AVERROR(EINVAL); > @@ -340,14 +349,15 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo > if (!param) { > av_log(log_ctx, AV_LOG_ERROR, "output_mix_config is not present in submix %u from " > "Mix Presentation ID %"PRId64"\n", i, stg->id); > - return AVERROR(EINVAL); > + ret = AVERROR(EINVAL); > + goto fail; > } > > param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); > if (!param_definition) { > param_definition = add_param_definition(iamf, param, NULL, log_ctx); > if (!param_definition) > - return AVERROR(ENOMEM); > + goto fail_enomem; > } > > for (int j = 0; j < submix->nb_elements; j++) { > @@ -357,25 +367,31 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo > if (!param) { > av_log(log_ctx, AV_LOG_ERROR, "element_mix_config is not present for element %u in submix %u from " > "Mix Presentation ID %"PRId64"\n", j, i, stg->id); > - return AVERROR(EINVAL); > + ret = AVERROR(EINVAL); > + goto fail; > } > param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); > if (!param_definition) { > param_definition = add_param_definition(iamf, param, NULL, log_ctx); > if (!param_definition) > - return AVERROR(ENOMEM); > + goto fail_enomem; > } > } > } > > tmp = av_realloc_array(iamf->mix_presentations, iamf->nb_mix_presentations + 1, sizeof(*iamf->mix_presentations)); > if (!tmp) > - return AVERROR(ENOMEM); > + goto fail_enomem; > > iamf->mix_presentations = tmp; > iamf->mix_presentations[iamf->nb_mix_presentations++] = mix_presentation; > > return 0; > +fail_enomem: > + ret = AVERROR(ENOMEM); > +fail: > + ff_iamf_free_mix_presentation(&mix_presentation); > + return ret; > } > > static int iamf_write_codec_config(const IAMFContext *iamf, _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".