From patchwork Tue Jun 15 23:32:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 28406 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:bbc9:0:0:0:0:0 with SMTP id c9csp124766ybk; Tue, 15 Jun 2021 16:37:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy24BQ/mReC8AON5gJJL7QoF2Cqr3IOLPTDr47+KV5KIJSx/pG07NODIZbuY8sVqshyFUEV X-Received: by 2002:a05:6402:4395:: with SMTP id o21mr689071edc.163.1623800240846; Tue, 15 Jun 2021 16:37:20 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id v11si308625edt.160.2021.06.15.16.37.20; Tue, 15 Jun 2021 16:37:20 -0700 (PDT) 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=ojK1NT3g; 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 5584F689DD1; Wed, 16 Jun 2021 02:33:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2062.outbound.protection.outlook.com [40.92.91.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9AB52680454 for ; Wed, 16 Jun 2021 02:33:51 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RZXLTKmojoPZHqetSB1sTMe4EpSFC/4VyogAsyl0V8R8On62t6A4mRDX6KMhpT3xj3yAcuZLRbXHxMt/PZSexF4OY6kzm+dTXKobOUseai0ZS1qCU6RDIJFlwtFww2aVVV3gG6LSZjxD29xDaz9VrxJrKj2f9xWN70uXIiPv7YmvoL3hKS/0u7v3p5g+qzP0XeNM4yQ8vC5AOGHbHKfBkgY3+9spcEfSvwPDGKMeBI4O3EgdaGjtQfZHaU3K0UGnfkmVEtjmWt5GNGszvSE2jw5c/Bx8/VOdj4Z0Cdp8WVnLyEh/znDU080WDAUIAyyXaTxqCJUiWGTpuDSXMPbZEA== 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-SenderADCheck; bh=r4g3mDB5R7Vb8JkQNRE5oAcpCS9X5LSj8i8VKYmxYAE=; b=I3c8d9yJ9WA95feyPPqAux+GJxwGReXXcFydzNcnEMHXZYCJqVErSBB0sivz2vF3gIbj5hlVimEshwjtVsI+Ycnz/DRdfwuSO8fqu9R0WiazmkDeJpEatEEXriq88L1BzCa8AU865zSKYWPn+e/GiqsS4BR8oVYYA3Cj0s2bwmqWH8nIouUYQfbbtBRVxOQDmm9OXh1j3VMfNKGKRQakqZdGjp5wjlhPRCg23tOTE1nEPqj/F3tSNZW+dD61qejjTwTokB0PHQ775dF3bU7CxDN5gtMisAUYp4Ouav8ycvtjOVRZ6ClUNQ+sbgNkpc6w3SHzlaWLWA4C4lfeDcU5bg== 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=r4g3mDB5R7Vb8JkQNRE5oAcpCS9X5LSj8i8VKYmxYAE=; b=ojK1NT3ga3DMhvTxmZu1VEq6F9KkYqQa6ylJb4Zjzl63ZRjvlB1mzzbw1geTX+zyngzwwxQsaTchnGXblL+varetrTaicGkeCLtFQATe9cLgtZXN98NCmHQ6AgteasVOvcmWitNVmxLIQEm7KypqJALQDD3LgEMJx3ev50rl0IpRwgMgYOB4LgBzK9Y7WAzX3ptVtqkXKLJtTc0tSTdRgV7aeOgIvWacJ87JT2/R56wmJ96Cpnzl4AtklGnPPTh872b54DNn0lqfT0ykny4d/IM6ePtQkto4Qti8okg2OoMfUgu0CDISeRd2B850GTzmH28tgC1vePWE6RCHs8FsDQ== Received: from DB8EUR05FT030.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::42) by DB8EUR05HT039.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21; Tue, 15 Jun 2021 23:33:50 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:fc0f::40) by DB8EUR05FT030.mail.protection.outlook.com (2a01:111:e400:fc0f::228) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.16 via Frontend Transport; Tue, 15 Jun 2021 23:33:49 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:A24C29066DAF8DB9F9A8DC5A43AFA6FB2D4AF0FA043A694BF21AEA1B513353B7; UpperCasedChecksum:49B1C8770EE14D5E32017A534FA26B8DDB38E8A90717DDFA692A0CAD1C8F1CCC; SizeAsReceived:7585; Count:48 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::f4cc:63fc:9cef:37fb]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::f4cc:63fc:9cef:37fb%6]) with mapi id 15.20.4219.025; Tue, 15 Jun 2021 23:33:49 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 16 Jun 2021 01:32:18 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [0H5Ur6YhAsS4KBWTqAQzvCQ4kV78/3hv] X-ClientProxiedBy: PR3P189CA0063.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::8) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210615233243.1173928-28-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.97.82) by PR3P189CA0063.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Tue, 15 Jun 2021 23:33:49 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 3d39e392-47ad-4455-7404-08d93056073e X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiR9SlwCHtPrt+MV8TUUwp4pWhkGqqrkWQINYQnacuBy6NE6RX291zet4ZSf3ApatY08mcIOHf/dZKefm9vqDiJIQ70T/5H+2p+lYBYu67P+Y6JRlvFqjwtNvNDh2alsaWFbMOIgE4L2qH3NhTz84BU3wluk4fq914RdvJyXfk9dpNyG7L1SwVmzccTPWdYlRM3ErFW0KR7Bx3+3t82IKn0mueqWlbe/sf7wbtROneK0obCJROxKDNhAgl7reevMqldhewyVH0QVpfdKXIRZrv57NSoWWaU//W67k7gfAoEGptEZT7tv2u0ZaM3p7/o5ox2Z5iQ31GMBaGaf3LfXJwQ+THx90F1ouHVpp3/qhWgWZBBZ+73hTvnJy1CZKg1RpjAgqLtNpoaX9ACA5NChlnFyW8XAtsxVr3UePMFm35t690SRxqsYWDeBfhJs77qZ2p0TLM89DdsHu1Fo3818Q5FwgJDvIAvXnKy0tx7CA57Fax8KDKAuBLQ8NX34ElqYoe6xCd/61KkKG2gcDg7YvRaCDyDXy/hG8eNZ0wi0QbwLaCeJdcQqrmVE3Qo5QpqsbnyoqemrfonUZaQwh3x8wF1LDl6Lr74/UASQ5jPGcE7KjM1d+t5/XkS2GwArBDRqnuGl8SWVZA23UBA27g4V2RL9x68WHBCR7DEYNA35GEUCwYPSuZs3bmgCayWrAcv364nd+fUc9MGlPAMDhfro+N8HtTzdg5ngj6AoFqNVgK2PlzCKJjig4T4v39mqPF0Odpg= X-MS-TrafficTypeDiagnostic: DB8EUR05HT039: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jS0dpsO475ZFQIXUDBfDxI5McoQ2pMGZgLBpnhOJm2yE+BMe01TycmD1zFHq2T+jc0qEI79puCdaIfMDFBLDR+I4fgukX+/sF19+oATJU1BwGWC4PFrEBcDS7VYYa4RlEmQLKbMNj02xrvbn+wKvOzsGzM3NlePGgm5b+9XM2hcoFXYcQyIv6Nska3z+BQpYKs2A8aF4jTEasXNhTi3bwcNMkO3f/9B4YDVrMaGckA1iFHQQ3BrElhTIzasEJ/VYYGyAl1mx2IOELXX0tyL2mhMH9eCWAp6/LpXnTboB4cJwgfy6P7ovetEWWIrMVZ+UE70oZbpyuHIiFG3eVsRfQyhml0Sv9UB4oCJHRo6b/qGnXQ6+AoQYBJrVnjDoPps5loNOEfENza91MwJ2VvsRXg== X-MS-Exchange-AntiSpam-MessageData: 4ZXOlyO13Znf4S/GSUjFM/qSc3AY0AP8TjsdQ8JYphLFTEbIsdzmrdZ1JXjmGco5RWVz4v4pvH18uRgzeTIpM+vI5jdH6KnRexQh7JnP966L/KHIliaJo9j1obP7/vxqUTCpMV6z5hgyuyGcmF51aw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d39e392-47ad-4455-7404-08d93056073e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2021 23:33:49.8569 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: DB8EUR05FT030.eop-eur05.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8EUR05HT039 Subject: [FFmpeg-devel] [PATCH 29/54] avformat/mxfdec: Simplify cleanup after read_header failure 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: IoIhuwFMKyyl Content-Length: 4403 by setting the FF_FMT_INIT_CLEANUP flag. Signed-off-by: Andreas Rheinhardt --- libavformat/mxfdec.c | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 7b40076fb4..16f5052452 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -313,8 +313,6 @@ typedef struct MXFMetadataReadTableEntry { enum MXFMetadataSetType type; } MXFMetadataReadTableEntry; -static int mxf_read_close(AVFormatContext *s); - /* partial keys to match */ static const uint8_t mxf_header_partition_pack_key[] = { 0x06,0x0e,0x2b,0x34,0x02,0x05,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x02 }; static const uint8_t mxf_essence_element_key[] = { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01 }; @@ -3343,7 +3341,6 @@ static int mxf_read_header(AVFormatContext *s) if (!mxf_read_sync(s->pb, mxf_header_partition_pack_key, 14)) { av_log(s, AV_LOG_ERROR, "could not find header partition pack key\n"); - //goto fail should not be needed as no metadata sets will have been parsed yet return AVERROR_INVALIDDATA; } avio_seek(s->pb, -14, SEEK_CUR); @@ -3374,8 +3371,7 @@ static int mxf_read_header(AVFormatContext *s) if (!mxf->current_partition) { av_log(mxf->fc, AV_LOG_ERROR, "found essence prior to first PartitionPack\n"); - ret = AVERROR_INVALIDDATA; - goto fail; + return AVERROR_INVALIDDATA; } if (!mxf->current_partition->first_essence_klv.offset) @@ -3400,7 +3396,7 @@ static int mxf_read_header(AVFormatContext *s) for (metadata = mxf_metadata_read_table; metadata->read; metadata++) { if (IS_KLV_KEY(klv.key, metadata->key)) { if ((ret = mxf_parse_klv(mxf, klv, metadata->read, metadata->ctx_size, metadata->type)) < 0) - goto fail; + return ret; break; } } @@ -3413,21 +3409,20 @@ static int mxf_read_header(AVFormatContext *s) /* FIXME avoid seek */ if (!essence_offset) { av_log(s, AV_LOG_ERROR, "no essence\n"); - ret = AVERROR_INVALIDDATA; - goto fail; + return AVERROR_INVALIDDATA; } avio_seek(s->pb, essence_offset, SEEK_SET); /* we need to do this before computing the index tables * to be able to fill in zero IndexDurations with st->duration */ if ((ret = mxf_parse_structural_metadata(mxf)) < 0) - goto fail; + return ret; for (int i = 0; i < s->nb_streams; i++) mxf_handle_missing_index_segment(mxf, s->streams[i]); if ((ret = mxf_compute_index_tables(mxf)) < 0) - goto fail; + return ret; if (mxf->nb_index_tables > 1) { /* TODO: look up which IndexSID to use via EssenceContainerData */ @@ -3435,8 +3430,7 @@ static int mxf_read_header(AVFormatContext *s) mxf->nb_index_tables, mxf->index_tables[0].index_sid); } else if (mxf->nb_index_tables == 0 && mxf->op == OPAtom && (s->error_recognition & AV_EF_EXPLODE)) { av_log(mxf->fc, AV_LOG_ERROR, "cannot demux OPAtom without an index\n"); - ret = AVERROR_INVALIDDATA; - goto fail; + return AVERROR_INVALIDDATA; } mxf_compute_essence_containers(s); @@ -3445,10 +3439,6 @@ static int mxf_read_header(AVFormatContext *s) mxf_compute_edit_units_per_packet(mxf, s->streams[i]); return 0; -fail: - mxf_read_close(s); - - return ret; } /* Get the edit unit of the next packet from current_offset in a track. The returned edit unit can be original_duration as well! */ @@ -3916,6 +3906,7 @@ const AVInputFormat ff_mxf_demuxer = { .long_name = NULL_IF_CONFIG_SMALL("MXF (Material eXchange Format)"), .flags = AVFMT_SEEK_TO_PTS, .priv_data_size = sizeof(MXFContext), + .flags_internal = FF_FMT_INIT_CLEANUP, .read_probe = mxf_probe, .read_header = mxf_read_header, .read_packet = mxf_read_packet,