From patchwork Tue Jun 15 23:31:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 28389 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:bbc9:0:0:0:0:0 with SMTP id c9csp122598ybk; Tue, 15 Jun 2021 16:33:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZBTr/RJPXOZxvKP4i8uKbdYcAhqaqGzg22f+Iecq6ILoZgD73gtR9utxuzVjRy4bbRkzm X-Received: by 2002:a05:6402:2791:: with SMTP id b17mr677245ede.113.1623800018574; Tue, 15 Jun 2021 16:33:38 -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 y3si402130ejk.208.2021.06.15.16.33.38; Tue, 15 Jun 2021 16:33:38 -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=bvrbSsxa; 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 0F7006898E0; Wed, 16 Jun 2021 02:33:19 +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-am6eur05olkn2101.outbound.protection.outlook.com [40.92.91.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 253206897DE for ; Wed, 16 Jun 2021 02:33:12 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eRTFMKwISW0PKIOBabMDayNTOKWUWewl+8znBAKdfY7LqQXKEC+9sxS40ihSmsB8DsRYnmewF1DHn5PoaEdorhYYH6DX/tBvGwKwMvIxI/VhzT+j7rz7TglmUGFVjRg42kycdsteqS+8tNZh/ycZCWFiaQC7RbVoHYaGH/be2aU/vU+h7lBJMClKSW7hxbwlg3NdRF4ay1Nkzhm4uIPSn0b18LMLqV5pqmiwRiNgaxlZrkCMGPCIDoaY5zhWnAz5dMGHcclnax7tuaxbddntTV1BgVHnGWAGYcKQ2+/70K7CNsiHm/GG5Ovl3QgAyddq3A578uUqbiizJA2zvmYp4A== 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=5j02LgA/VlpsCCq0Dutwlwy33vzMhEMdkjmLtuDgCE0=; b=QqlyZ4hbzG/P4CPS52zMVUBhgX7w9UVO/HiMVp4hU711QKWQ1v5yoVRhn+tAvcQL+qYJOhTP0PmxhTqaZvhu9caT1V2R7nvdmA1iilbIhzGdNbreLI5I8CRs5jdNrr04ggbgUah5nxENst73BJzQaA5sSwfjZU0owyMGIfxxtT+qE2+gOf0Eau4MG5nXWEzGeJPGEj13GKy3wo8VMRuYlLgPKb35WXMywXkd3frxVqmubkR+jv8jmzZR8pVqXqNNDLiPjYuLMeC98RvKrgXCtCZWp6NxSbffUJXO8a//rAQ1o3iTsCGkGwM7qJ7UmKe8ozTOX2JegOPfE/9HbYCNVg== 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=5j02LgA/VlpsCCq0Dutwlwy33vzMhEMdkjmLtuDgCE0=; b=bvrbSsxavJ4fdswA5rC43iVG5e4wt1ltlGjJ1nVS53zMoyniHp28zYDT+4wCZIR1+TXdHDqgcgA23EQOGksRKm4ZAsSR/SUtuZe4VOU1VQu9H32X6h6SAbge4iGxPNXDsQDHgA6AZZjNFJdAG365yfzUdTJ5jxRrMx5OKMkQ1/6Ir4ShMiwsix/uSVqYuT7JSxfUZFJ6LXU0EsCsyDYTZQvuEXq1E+QtlLIOJ7fp67pLxZl6SucDYPdpV50Wb0f8CMnt2voqpnwYzJHYgcinBB/RbCPxjXKsRw2kNX6nxgW6IoYq9F1glwcyFpvRCtQQAQu6h30AxGWf788BUhdJ/g== Received: from DB8EUR05FT045.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::48) by DB8EUR05HT012.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::139) 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:10 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:fc0f::46) by DB8EUR05FT045.mail.protection.outlook.com (2a01:111:e400:fc0f::383) 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:10 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:70C524A5504F589EBBDB81ED7EC227D93EE9EFCFDFA1ABFB3A43D9A089C33B3C; UpperCasedChecksum:EDD2B296FB149AF586DA30062754CC3785101E79DFB6AE506EF7E97C5A8FDB59; SizeAsReceived:7592; 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:10 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 16 Jun 2021 01:31:55 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [1QxMD1xgoLl+CqY+r8aCk1DGN/JS2x/S] 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-5-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:10 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: fea7f0c2-0877-4492-ce21-08d93055eff5 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiR9SlwCHtPrt+MV8TUUwp4pWhkGqqrkWQJ/G2nBDhW1VurDrDJ+qTT2Jqg+yYcW+wWKVoY5SnvajdNCjnRDjjMhAF/UoLxGAkwnRcAWBkvALyzRqQlebh6ezI/K5G+unKRXRLg2rJTmEoahhA0U7X43DjNVdJy+5RmUEYvP+4ZwWyj3UW4E4DWsNMJ5nEvFJnVR7nxrgiczZt4NhSz9vfxFKpmI8plLbXgEAELvNw9VS6rUswBFSemj+0+vkpdafj0bgXukSJpVUoe8LaZtzwkJePk8iIr16N2ac8xV8xjvCeXPrg1bEBFriOs59Kbtx8X4n6nGILxZq5wbXFJdxF9zL+fs74D1lidtRXVdZwJNIDH/EqDz04ypgcITe3IROPY5//NRNIXf8cCq9Xcpy8D9p9Le8Ubaz9T7CtJiXGMcYdBkpXcgQ6H9wv16+wVNi9N6a/JiF69th0HVZcgNHQI5MIR5UapYN6kSbDj3BpEW63H1oOWXJcNhoSH2PFsXALDDY7G79/J5xvlsUSjGVjfby+VYfY74TjN/LgbJdgGtGoUpQxcr2hSgzfbvAxmzeKc9F7bo0J45rW1dJxBJJoPrc1r65wSb79/yRZ6+SCYTS+zczf2RGkRy3Lj41iKxKvoYsRfU3UO2p+ndIZyNgKe2d5iaU9mFM3j/okqnKvx78a2/SvO3frbMWDktRL0ZS0H7Wy5jqEb/eyvWRuVdfwPYGacIdN34y9ExaQzEcp00QAP5yJgTNASVr92l9p2OTdo= X-MS-TrafficTypeDiagnostic: DB8EUR05HT012: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nIid9LN1NH3fOdxMmM8N1XAOlLEyQAkEgd1YiTDi5InZhiD7lDv4LO6WpQfPx1qh5OJG2pppTy5MAg652LTDvANxW3ZITuvkqS1AX4HzUd7t6zwc0cTz8yp9qRHTy5tzSANeu74zKpXXO+JToXGjr0ZY0uokfWp5NVsrz+RAcPGk/QOgFJDRRZUhq2yy3OEGJ+wuS2vln5pL5XsX+vr14aYPOctqvxKveKE6WrqCDPCGYm/SvFrWrBBtXZUk5HwixF+02B8SuytSVopsWfvBbaJsHNN9QvyGq9p0U67SF29UWJ6wOMcjkQx2s+Wcum+1TAX+o+MPrQcLYmqFCS0NZiwhcFEeF1jDtcm5iWHqv7nW2/O0ybGtmkfuRJS4BtgbUxNRISScCINc+3Cu25A/dA== X-MS-Exchange-AntiSpam-MessageData: JIdj6Fpq0317kB8rCCtpxtcJGy/KZ4Y0ioWZ22HmT2LDkNGmEaUKI4HAIaWmS4Cb60BPWBop8PmvV5mAG/VyKZdXcwa0tFJZ/d1kP1J4uii7O06gJTRvUajWbByP2wSFWqX3ArbV2V94O5sq/guDRA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fea7f0c2-0877-4492-ce21-08d93055eff5 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2021 23:33:10.8221 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: DB8EUR05FT045.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: DB8EUR05HT012 Subject: [FFmpeg-devel] [PATCH 06/54] avformat/avidec: 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: HqpZ5kJ7wf/J Content-Length: 5861 by setting the FF_FMT_INIT_CLEANUP flag. Signed-off-by: Andreas Rheinhardt --- libavformat/avidec.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 14a2dd6cd7..39039f5bc9 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -122,7 +122,6 @@ static const AVMetadataConv avi_metadata_conv[] = { { 0 }, }; -static int avi_read_close(AVFormatContext *s); static int avi_load_index(AVFormatContext *s); static int guess_ni_flag(AVFormatContext *s); @@ -474,7 +473,6 @@ static int calculate_bitrate(AVFormatContext *s) return 1; } -#define RETURN_ERROR(code) do { ret = (code); goto fail; } while (0) static int avi_read_header(AVFormatContext *s) { AVIContext *avi = s->priv_data; @@ -510,7 +508,7 @@ static int avi_read_header(AVFormatContext *s) frame_period = 0; for (;;) { if (avio_feof(pb)) - RETURN_ERROR(AVERROR_INVALIDDATA); + return AVERROR_INVALIDDATA; tag = avio_rl32(pb); size = avio_rl32(pb); @@ -582,12 +580,12 @@ static int avi_read_header(AVFormatContext *s) stream_index++; st = avformat_new_stream(s, NULL); if (!st) - RETURN_ERROR(AVERROR(ENOMEM)); + return AVERROR(ENOMEM); st->id = stream_index; ast = av_mallocz(sizeof(AVIStream)); if (!ast) - RETURN_ERROR(AVERROR(ENOMEM)); + return AVERROR(ENOMEM); st->priv_data = ast; } if (amv_file_format) @@ -603,7 +601,7 @@ static int avi_read_header(AVFormatContext *s) /* After some consideration -- I don't think we * have to support anything but DV in type1 AVIs. */ if (s->nb_streams != 1) - RETURN_ERROR(AVERROR_INVALIDDATA); + return AVERROR_INVALIDDATA; if (handler != MKTAG('d', 'v', 's', 'd') && handler != MKTAG('d', 'v', 'h', 'd') && @@ -708,7 +706,7 @@ static int avi_read_header(AVFormatContext *s) "Invalid sample_size %d at stream %d\n", ast->sample_size, stream_index); - RETURN_ERROR(AVERROR_INVALIDDATA); + return AVERROR_INVALIDDATA; } av_log(s, AV_LOG_WARNING, "Invalid sample_size %d at stream %d " @@ -944,7 +942,7 @@ static int avi_read_header(AVFormatContext *s) av_log(s, AV_LOG_WARNING, "New extradata in strd chunk, freeing previous one.\n"); } if ((ret = ff_get_extradata(s, st->codecpar, pb, size)) < 0) - goto fail; + return ret; } if (st->codecpar->extradata_size & 1) //FIXME check if the encoder really did this correctly @@ -962,7 +960,7 @@ static int avi_read_header(AVFormatContext *s) avi->use_odml && read_odml_index(s, 0) < 0 && (s->error_recognition & AV_EF_EXPLODE)) - RETURN_ERROR(AVERROR_INVALIDDATA); + return AVERROR_INVALIDDATA; avio_seek(pb, pos + size, SEEK_SET); break; case MKTAG('v', 'p', 'r', 'p'): @@ -1005,7 +1003,7 @@ static int avi_read_header(AVFormatContext *s) if (s->nb_streams) { ret = avi_read_tag(s, s->streams[s->nb_streams - 1], tag, size); if (ret < 0) - goto fail; + return ret; break; } default: @@ -1016,7 +1014,7 @@ static int avi_read_header(AVFormatContext *s) "I will ignore it and try to continue anyway.\n", av_fourcc2str(tag), size); if (s->error_recognition & AV_EF_EXPLODE) - RETURN_ERROR(AVERROR_INVALIDDATA); + return AVERROR_INVALIDDATA; avi->movi_list = avio_tell(pb) - 4; avi->movi_end = avi->fsize; goto end_of_header; @@ -1032,9 +1030,8 @@ static int avi_read_header(AVFormatContext *s) end_of_header: /* check stream number */ - if (stream_index != s->nb_streams - 1) { - RETURN_ERROR(AVERROR_INVALIDDATA); - } + if (stream_index != s->nb_streams - 1) + return AVERROR_INVALIDDATA; if (!avi->index_loaded && (pb->seekable & AVIO_SEEKABLE_NORMAL)) avi_load_index(s); @@ -1042,7 +1039,7 @@ end_of_header: avi->index_loaded |= 1; if ((ret = guess_ni_flag(s)) < 0) - goto fail; + return ret; avi->non_interleaved |= ret | (s->flags & AVFMT_FLAG_SORT_DTS); @@ -1079,9 +1076,6 @@ end_of_header: ff_metadata_conv_ctx(s, NULL, ff_riff_info_conv); return 0; -fail: - avi_read_close(s); - return ret; } static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) @@ -1971,6 +1965,7 @@ const AVInputFormat ff_avi_demuxer = { .name = "avi", .long_name = NULL_IF_CONFIG_SMALL("AVI (Audio Video Interleaved)"), .priv_data_size = sizeof(AVIContext), + .flags_internal = FF_FMT_INIT_CLEANUP, .extensions = "avi", .read_probe = avi_probe, .read_header = avi_read_header,