From patchwork Mon Feb 19 22:17:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46378 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dda5:b0:19e:cdac:8cce with SMTP id kw37csp1522702pzb; Mon, 19 Feb 2024 14:15:47 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWtDstmmgDJJ37Mz1vZMYbX8H1FRaZG/9wyqjpXEPAjnLy09i+eV6nTfALiiy17YJ/Hh75ZYpQvoT7nNQi0IFBPEqWH5o5aXw3kpg== X-Google-Smtp-Source: AGHT+IHybBETQ4VbNW9HZIYehYeE+bDqgeM68EPtH2qXUaGKtAw4fDClD88raUAE43XAnfuDyfKK X-Received: by 2002:a17:906:f1cb:b0:a3e:95d7:a9c9 with SMTP id gx11-20020a170906f1cb00b00a3e95d7a9c9mr3154167ejb.10.1708380947395; Mon, 19 Feb 2024 14:15:47 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id jz10-20020a170906bb0a00b00a3d99c115f4si2801787ejb.77.2024.02.19.14.15.47; Mon, 19 Feb 2024 14:15:47 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=bMS1jrWY; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E4B2D68D42F; Tue, 20 Feb 2024 00:15:40 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2062.outbound.protection.outlook.com [40.92.89.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A3B9E68D3C1 for ; Tue, 20 Feb 2024 00:15:34 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kJoKCzRt6KRdt+be1FnLHGjFGuDdAcIJ5n4JhKa/ERmenc3JeoEZgxzCrWniq2z3OYL/OM5QCHPtkyAsA9JNos8Bv35f+he38abbjH6/M9xnjihTLpPz8j4GTKM8PbWJtq4MGC41V/l4Odwy/8mONpxQj4ZZAycAvDo8S1a48Ulukuzmfbt9QZwQAx+mDVAIQYNFpsRIC89+lfROP8E7Xgd/4zUQrB4GO4LCDc6/o0MxS/8P0DulTLxGXUVjOBNK0mwVZgPoM6ktC2gTIpCjdt1Q87muACgTozsSIPsIzBb/mqbnqz5K57E9iCAYK/cjQnmesIl0E4z8UQ6mQePi4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZtblSd7bBKyFpk3N57ButBzfQkWTM7urozX/1E9a8Xk=; b=gX7nvltW6EASZBZkM7zRotg53l3XraNfqznA18RxohcbhJ6yZOz0agLUygqC71vXMQ4IdSUKK1KJfSS30Ab2ppyQF0x8fGF1GVLcBmlWqZ329D2vgVbpc/PmP47meTXp0oDBj9xfON4kyntjEP1U4Sqe8qtZqge3jt6qxkAXDaKChfoNhE/yGxWk9ni5mQPcinNZqevOFFAduEsX68vl/BhL9KnC8o/5xEriIGIQyXsDpPZi4yixbpa1SRPy89mzbs1mMUcx2xoz5SwxtCdajVQbJsooZctZE38FxGse0kl3tEGX6oYNhdh1/o/tCHh71OUxY3aG5F7Ek0OxuqNCLQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZtblSd7bBKyFpk3N57ButBzfQkWTM7urozX/1E9a8Xk=; b=bMS1jrWYYX/NIilRccZ14UKypjwPmhOfpd9olFab6G5HdbR6BYBW9AhRgVLEfcgUC9nnzTZFguDY103olsOOoo58ZO77ewq4/UxLK1QPJgn0W/66ot3q1UHUFzS8VV/zuNWuzubHqC9rboY3ktqW9bWhrVGA+4RbWKkTTY87k7XcTH26EVb105TTK0T62h6KbNbgu8C/a6mhfssIkcYRMJMajv1vGAQ9Ts7be8mz/tDzvuM2UPZBTFNgUg4jYSylR8ZwkLi8KSDGBmrMTSta1dj7AdPYKT4fBWhAEMuePLuVcAdMx3AniKS2bbKIxlQAivwX748PCMTh1Fso8VUSlw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0131.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:176::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.38; Mon, 19 Feb 2024 22:15:29 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7292.033; Mon, 19 Feb 2024 22:15:29 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 19 Feb 2024 23:17:16 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: <6819fbe8-7239-4890-bb9f-a40e35520613@gmail.com> References: <6819fbe8-7239-4890-bb9f-a40e35520613@gmail.com> X-TMN: [PlaV6haVbvBFdC+Mwmhae7hcqhPvAZvuSisJrNjWl58=] X-ClientProxiedBy: ZRAP278CA0012.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::22) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240219221716.746221-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0131:EE_ X-MS-Office365-Filtering-Correlation-Id: b285e248-94dc-4672-c205-08dc31984817 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8gzv2lUl0aa4FgJWGHx0jPK4POBMjC0mST7JRpnryMe7IzjJeVsZ3E5DZ6w/+tzW65Th2fjXPQ24ZPmF1Zi4rKjneXb7tDNR4jKzv4I/dWxctbxoUWTa3iSnrrzTRLK6BMq6g2fgXuTEvArtxj8M5lQF7AwLYsw8DTeY6+1QqzaKwXkUDgr0VV0kHUVsOU1GVDJ+JSKCRnqfi2LepPMgRag45run9mNnxdSpwjYTAAepWJT4Ui73V9wYmc2vjK8z0Xm7racCrhLbmgEnjwqf4iGWUNfalMebt6ZcCOyoJ7yyHS4/aRcGO88wRqEv3o9bKnS9JklUOOf5IEvKcLD9Kq23AvEOK5FotUrm1mdFXT4MxAzJ7WSMI3CA2ubt4LlYIiubmVTm5uxfCkrMD6K2ix5RIe6/X3XIjeoF42hngHN1HbEpTysLhbJD7+BrtyHrQbOs7HD8AOBrBOWBlkyCULhNIeGZ4R5oQRDshyaTnR2kowZv87OGXMXUTL2GiF1sczIlitH/1W9hAd2GoJCGsPsNG2JEEzM21Vsf9ClaUYKgTccPYnM/Z/xyEgSjmAtDRq15GO13WTXY6Tu42VR7a2pikDUUo8wj2MWLmLCvysQr4zimQzLqKBdF9V9s//Hv X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PpEj9tN1r1rDPJYx0IZvXhmPslAsaDVubiBgHOTKN6NWYxtM28UlqPew0kDDQgHS7iZoh5iNScRLdEb7ziRhmOk6tpA/1viBAPRQAmwsFcq4KGaC7mnlRW0ofJbYjWlemv7pttp140zMtcfZxEyFlvWJQDLhn2OA+DBvbF0XCuY86yen9XWOLV0E3VlChDkNJkumpcB00vt01A9JlRZNtC3WMF4ij4obWL9BAJy4RLO1PYrmFcAV8tYtrSMArWfzjkhauwY56dkNcF5e9u9sQz3gXksBsUQhu7RKgrZjcGrp0xQPIG1QODwtjCj4TYS5Dyf+cqM+8bqYQ+5liu5r0ZaoOdecGyexNt9bO8dm/YwBzYRYUr0y4SGFPXHxCE5DAYdZfcnTQWgbpP4lfzLHzRbgRXYBkCecW2BzgJloR6BO2BppCuUtYd+NL6/yNeV0pU+w+a1jSnqK8s2etUowy9wdmfoQdYp40GlVHbVZIY5uliYeoQh8kihvzW2PPdlpAC2P/mX0Y4/8zXiuGDPWMkNSSWK4uqeLgRpPLAgmOAX9KDzrh8IiEiVFQnP82OzVLZ1TfbzCNBOzuqF8vBo6tfJWV5rsm3EC2Oi7bZ2wYpK5Um+yfR5/fnsrBvbdR0s//i/F/4rUcZfFhOls5pJG/p86jpsOVUsCsa9jrTJFmfKjYR+7CRqOpqSJ3N5NZE/j/KEv+5ztTPhvOarPGH/gG92aG83Y0OXuNNckn6AYh2L6RwBhpZjD4qdL0QFEZMW1JuD+z+aN3NO+fAAB8EpTD4fq0XjgtVq9+CbDcwAePPqizPdaiPmW/SDgtlSTAVN8GrGPPQzmUm/CX9qhWKCB2DlXsnISaisuytX96AimGGaNUbtAWbwOXS57NQSvM2nxsM4OQrfu+sxuGCqwGHdBPTfQvvenWA0nusA/kinKGrkhCub2jXZCF/DMTW9lPCvVdWO7IeeUiaO1Pr6IT+BmDb7yAltXruDJc/m/WpmTy9b+uT7XrAM6TK+P1/QejiaKXPwbkAiombLBNdKUlhrf1wsPYs7ugRLI8X85So/m8KDzXepQ8NcfYwfqQdbJBvrLRCSQ3Daf0EKiYaom0cJ676SKy+HCuNKk/pxHVA8CMdpnGxBXLymOm333QRssbjyy0efxhTTJUmA9HmUPFgyzaIjAAmZMHxzy5jj7fWblO4tpKmx6510Z6T9WRvbYHP7KuI4u+NnEfFk3WYm63gDZ2MgURu/OGeeCkILB0GRVZC1oy4HQ2XrUuBFAkPOmKM5MUcGhYWi3wCVCuP86ylk3Nw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b285e248-94dc-4672-c205-08dc31984817 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2024 22:15:29.5553 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0131 Subject: [FFmpeg-devel] [PATCH v2 6/6] 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: L9NFjOlHlb/V Fixes Coverity issues #1559544 and #1559547. Signed-off-by: Andreas Rheinhardt --- libavformat/iamf_writer.c | 53 ++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index b12c7e77f9..a807fed786 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -239,13 +239,17 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void audio_element->codec_config_id = ret; audio_element->substreams = av_calloc(stg->nb_streams, sizeof(*audio_element->substreams)); - if (!audio_element->substreams) - return AVERROR(ENOMEM); + if (!audio_element->substreams) { + ret = AVERROR(ENOMEM); + goto fail; + } 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); + if (!audio_element->layers) { + ret = AVERROR(ENOMEM); + goto fail; + } 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 +270,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 +281,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) { ret = add_param_definition(iamf, param, audio_element, log_ctx); if (ret < 0) - return ret; + goto fail; } } if (iamf_audio_element->recon_gain_info) { @@ -291,24 +297,30 @@ 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) { ret = add_param_definition(iamf, param, audio_element, log_ctx); if (ret < 0) - return ret; + goto fail; } } tmp = av_realloc_array(iamf->audio_elements, iamf->nb_audio_elements + 1, sizeof(*iamf->audio_elements)); - if (!tmp) - return AVERROR(ENOMEM); + if (!tmp) { + ret = AVERROR(ENOMEM); + goto fail; + } iamf->audio_elements = tmp; iamf->audio_elements[iamf->nb_audio_elements++] = audio_element; return 0; +fail: + ff_iamf_free_audio_element(&audio_element); + return ret; } int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx) @@ -341,14 +353,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) { ret = add_param_definition(iamf, param, NULL, log_ctx); if (ret < 0) - return ret; + goto fail; } for (int j = 0; j < submix->nb_elements; j++) { @@ -358,25 +371,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) { ret = add_param_definition(iamf, param, NULL, log_ctx); if (ret < 0) - return ret; + goto fail; } } } tmp = av_realloc_array(iamf->mix_presentations, iamf->nb_mix_presentations + 1, sizeof(*iamf->mix_presentations)); - if (!tmp) - return AVERROR(ENOMEM); + if (!tmp) { + ret = AVERROR(ENOMEM); + goto fail; + } iamf->mix_presentations = tmp; iamf->mix_presentations[iamf->nb_mix_presentations++] = mix_presentation; return 0; +fail: + ff_iamf_free_mix_presentation(&mix_presentation); + return ret; } static int iamf_write_codec_config(const IAMFContext *iamf,