From patchwork Tue Jun 15 23:32:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 28336 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a5e:c91a:0:0:0:0:0 with SMTP id z26csp4313692iol; Tue, 15 Jun 2021 16:38:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwSvHbyLhkj1amwpTCrmjbCC3MZEbU5kbRLT5w+cZ3EovtsPqIh5iqEJfcogT9UTfNifT8z X-Received: by 2002:aa7:c84a:: with SMTP id g10mr703935edt.326.1623800326875; Tue, 15 Jun 2021 16:38:46 -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 v16si420197ejg.147.2021.06.15.16.38.46; Tue, 15 Jun 2021 16:38:46 -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=JiM43VSZ; 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 1774B689FD1; Wed, 16 Jun 2021 02:34:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2097.outbound.protection.outlook.com [40.92.90.97]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7DE6F689EE7 for ; Wed, 16 Jun 2021 02:34:35 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cTIGrqeMPI0x7a1bNDA7wz3FRkY689JzkX8/36WY7Q1Fkvy2moHzC/Qkj1jh59iwxUgXeIPEWbjaJURTTdESaw4zBzERz9cXHrormWrvpogQ0VNOfs8vGtbSMr1C57fyidwGLvNBwJLAQXtmLOBbW3CFyAjAOx1GLfAOvwDuOkQwRjehl0l0ZNggTCyAmjJ1NPNacKtxjnB9iX0IFP674x0WyR1ffaVdqbTdg9zLA3GnjPRDN2stQsx+alS86Ivactqy/VWoxVZVch8uUIKys7nsdUwr9pbNuyyD9f6YVpzJ9qeOtf9XokiQ8FH50+MxdMOv7HxRgoZVwfRyQFPFYA== 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=Isx2+bIHH1Miw2llxnsQcp3ICbczfRX7Qqz1dsxgIfc=; b=SN0rBfghduXy+Xlg0qCGUPMTdVYYj/aXUo5lbMwAMgRV80Uk7wYWdA+EWs0FXcKt87Yyz8G8Q/DlqyPdp+27cos8VUHJnBV7yS0aFJ74vmlMyqg+JeW0+BPOaXTFipq8XDnSBLXK4KhMVXOr+da8goqrHD2hDIs0HXwW7yopNVkLGs0aaDah9xOtCqrNaNgFWUbQgZXFedqZxtldQm1rounmzO8MacCqwZ4zW236J7njYwzM5YyAfNOQGWxLvZtZpBW+Xiu5T0kXb6MQEHNtT3HpjC1po4yJE2uDEWWM0kaYCbmWLn0ArW9NHQnCKDpsn2rI1hHXJff4L9t0dIM9Ag== 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=Isx2+bIHH1Miw2llxnsQcp3ICbczfRX7Qqz1dsxgIfc=; b=JiM43VSZt1wrmEvNv/2SWJULILD0l1CooR6IRZG1aZHaBU+vPkdWS9L8J2L6GlqZgc8kSgXQzva7LYsFZioXHxHnD3neumUsO2TPs0MIq9zoEkhrtEFoFfruzUkTAYLpuw69aNo+qSf6+80nJYQLhpw5ISjwq6wByMCZOoeHcm8rVTme0J5qtkY56kB9tgrRZVP1Ev2wkeC485xTC1MN+mqMkEqW8PruiQlkOOiXoUCobgc9TRcyc4f+sX9sANTf21pqhzxMbc8NujzbjSKwKUrZiUjSq0CSlitXFVohQKTIoDM/WaKpePIDmRE+NI8OEwjSoCRiukR1iJ5nmNcTqA== Received: from DB8EUR05FT030.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::46) by DB8EUR05HT010.eop-eur05.prod.protection.outlook.com (2a01:111:e400:fc0f::419) 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:34:34 +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:34:34 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:8B9D8FF20FAD5F2E70BC57F29A26B0A3F7BC38CFE92130C6242B107A746EC6B2; UpperCasedChecksum:26D2094D19634D829B3649D1F62B5218A7DA27077A3D7D90972DF227C06C2964; SizeAsReceived:7768; Count:50 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:34:34 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 16 Jun 2021 01:32:27 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [9FqO+2/fvRExW0UbOMoj3mwXwMNp+ZlR] 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-37-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:34:08 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 50 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 3acfdacf-5ecc-4d54-9534-08d9305612de X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiR9SlwCHtPrt+MV8TUUwp4pWhkGqqrkWQJ/G2nBDhW1VuCUfUvgQwiH7rget1HUOjFrEum45Hm8dZ0aFhI7p6piV1lpH/NDEByCVjmIRJHC/eUD+SmuXBGNOdr//YOdUOzK5I6nkC3GyLC8DBWt5NxE9c1LSHvHirWFL0jcovCXp6X6+976NxreqNMZGGZt0ZWCXa+JZtnW56iggcBWuiGqJI0ZIOfEGeP0+A7YVdf+3AB74lgoZHQByGgJ4wolpeTmSslr6UchuxoNqCqzUIGLhC8CGloaqY7cc4vhNlZTkvJjhhM3lbg2vEYknlf53D+HfV2bOfGVJ5A5g/VopfX1xTgBXjtJDSQIZZRLpO8xHOb9EdCTc+ZlQ5hGgknYjzsW688YEaFbaVIUqfTmORr0vggL0lT7E0Lp1F3rULfmpZl8UQNRpfKd+Od70o9SeQrniTSahh7U6wkRXaFtfj1AguZC3Sdg0+prZd7oVtIStMwUnbDcJL//3OtzCdZr1NRcrop80vB09HMk3D3ORbTvCAKJUOIhXTm51ZYKPUQanD30czP6+TQfJvKMVADObt+TiXpSvpTAk/SCizHfihCBQXR2caCTXVm/oP+6BXgyjvNzpVUYkIJMRkppkg5peQ/VwRZtT18t3lpxWlducvUtGMzXDjuhmHbaq8AEN7/fL6E6nKUIvgQnWK6IwRw2KrM/AcmNFl6ZUwPM7uGhHpWUeUFVfOu8+eKRxuNK6w+uAAAa7Btsy5XTYesAMM6Ska8= X-MS-TrafficTypeDiagnostic: DB8EUR05HT010: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pUpq4AkwEpHUKiHSZhTKDgeY0vPZ58EEA+P07uBwM8BCclFlvYDp7qLrNkG8mmxot6GZt7J63B9h/m2VBx1ZBu2qZEoWJnhYhxRUufqxh/VpjF5OEu3/uJHfS4eEOsomkBZ4wIoWthHk2NbTiXAKYNlHtBhZyAFuFi3xpXzGklfFVmv7fKz1/Ge+2OrrrS6rwq+eum+8GrhHdZzRlo21DcwHi9YH4WW9Q9sNFm5cMsCq+x5rPJuQlxpa2DA0zuWtYQwc/AABJeqrk2A/bUoES/bPfq3F2zHB+sqrWuhNJGUt/LOwv0huI9YzWVzrJI72g3nN7L4jgZPh0YhhY7N0p4ge0n/e9jP+KR3UplhCxRmoEpeSYDq9pJKoXsr39Xov X-MS-Exchange-AntiSpam-MessageData: ybCmMCziA4R0nvS6Fc8CGOl4lapxhTE6jRcUryKSnCd1A3qqSOAxNrhP11snCJqfans90al9mGnHmp2qBTkVIeCfd1F5KLvTqChY2cmw69dInWtzFr1LVU8ze192kKgpwRLZ8Do48T2eVcKIUmh7yQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3acfdacf-5ecc-4d54-9534-08d9305612de X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2021 23:34:09.3972 (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: DB8EUR05HT010 Subject: [FFmpeg-devel] [PATCH 38/54] avformat/rmdec: 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: Q9upSrphuWoS by setting the FF_FMT_INIT_CLEANUP flag. Signed-off-by: Andreas Rheinhardt --- libavformat/rmdec.c | 56 ++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index 68b5c3b75a..771c1778fa 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -66,8 +66,6 @@ typedef struct RMDemuxContext { int data_end; } RMDemuxContext; -static int rm_read_close(AVFormatContext *s); - static inline void get_strl(AVIOContext *pb, char *buf, int buf_size, int len) { int read = avio_get_str(pb, len, buf, buf_size); @@ -563,16 +561,15 @@ static int rm_read_header(AVFormatContext *s) avio_skip(pb, tag_size - 8); for(;;) { - ret = AVERROR_INVALIDDATA; if (avio_feof(pb)) - goto fail; + return AVERROR_INVALIDDATA; tag = avio_rl32(pb); tag_size = avio_rb32(pb); avio_rb16(pb); av_log(s, AV_LOG_TRACE, "tag=%s size=%d\n", av_fourcc2str(tag), tag_size); if (tag_size < 10 && tag != MKTAG('D', 'A', 'T', 'A')) - goto fail; + return AVERROR_INVALIDDATA; switch(tag) { case MKTAG('P', 'R', 'O', 'P'): /* file header */ @@ -594,10 +591,8 @@ static int rm_read_header(AVFormatContext *s) break; case MKTAG('M', 'D', 'P', 'R'): st = avformat_new_stream(s, NULL); - if (!st) { - ret = AVERROR(ENOMEM); - goto fail; - } + if (!st) + return AVERROR(ENOMEM); st->id = avio_rb16(pb); avio_rb32(pb); /* max bit rate */ st->codecpar->bit_rate = avio_rb32(pb); /* bit rate */ @@ -614,10 +609,8 @@ static int rm_read_header(AVFormatContext *s) get_str8(pb, mime, sizeof(mime)); /* mimetype */ st->codecpar->codec_type = AVMEDIA_TYPE_DATA; st->priv_data = ff_rm_alloc_rmstream(); - if (!st->priv_data) { - ret = AVERROR(ENOMEM); - goto fail; - } + if (!st->priv_data) + return AVERROR(ENOMEM); size = avio_rb32(pb); codec_pos = avio_tell(pb); @@ -627,14 +620,14 @@ static int rm_read_header(AVFormatContext *s) if (v == MKBETAG('M', 'L', 'T', 'I')) { ret = rm_read_multi(s, s->pb, st, mime); if (ret < 0) - goto fail; + return ret; avio_seek(pb, codec_pos + size, SEEK_SET); } else { avio_skip(pb, -4); ret = ff_rm_read_mdpr_codecdata(s, s->pb, st, st->priv_data, size, mime); if (ret < 0) - goto fail; + return ret; } break; @@ -662,10 +655,6 @@ static int rm_read_header(AVFormatContext *s) } return 0; - -fail: - rm_read_close(s); - return ret; } static int get_num(AVIOContext *pb, int *len) @@ -1151,6 +1140,7 @@ const AVInputFormat ff_rm_demuxer = { .name = "rm", .long_name = NULL_IF_CONFIG_SMALL("RealMedia"), .priv_data_size = sizeof(RMDemuxContext), + .flags_internal = FF_FMT_INIT_CLEANUP, .read_probe = rm_probe, .read_header = rm_read_header, .read_packet = rm_read_packet, @@ -1252,18 +1242,16 @@ static int ivr_read_header(AVFormatContext *s) for (n = 0; n < nb_streams; n++) { if (!(st = avformat_new_stream(s, NULL)) || - !(st->priv_data = ff_rm_alloc_rmstream())) { - ret = AVERROR(ENOMEM); - goto fail; - } + !(st->priv_data = ff_rm_alloc_rmstream())) + return AVERROR(ENOMEM); if (avio_r8(pb) != 1) - goto invalid_data; + return AVERROR_INVALIDDATA; count = avio_rb32(pb); for (i = 0; i < count; i++) { if (avio_feof(pb)) - goto invalid_data; + return AVERROR_INVALIDDATA; type = avio_r8(pb); tlen = avio_rb32(pb); @@ -1275,25 +1263,25 @@ static int ivr_read_header(AVFormatContext *s) } else if (type == 4 && !strncmp(key, "OpaqueData", tlen)) { ret = ffio_ensure_seekback(pb, 4); if (ret < 0) - goto fail; + return ret; if (avio_rb32(pb) == MKBETAG('M', 'L', 'T', 'I')) { ret = rm_read_multi(s, pb, st, NULL); } else { if (avio_feof(pb)) - goto invalid_data; + return AVERROR_INVALIDDATA; avio_seek(pb, -4, SEEK_CUR); ret = ff_rm_read_mdpr_codecdata(s, pb, st, st->priv_data, len, NULL); } if (ret < 0) - goto fail; + return ret; } else if (type == 4) { int j; av_log(s, AV_LOG_DEBUG, "%s = '0x", key); for (j = 0; j < len; j++) { if (avio_feof(pb)) - goto invalid_data; + return AVERROR_INVALIDDATA; av_log(s, AV_LOG_DEBUG, "%X", avio_r8(pb)); } av_log(s, AV_LOG_DEBUG, "'\n"); @@ -1310,19 +1298,14 @@ static int ivr_read_header(AVFormatContext *s) } if (avio_r8(pb) != 6) - goto invalid_data; + return AVERROR_INVALIDDATA; avio_skip(pb, 12); avio_seek(pb, avio_rb64(pb) + pos, SEEK_SET); if (avio_r8(pb) != 8) - goto invalid_data; + return AVERROR_INVALIDDATA; avio_skip(pb, 8); return 0; -invalid_data: - ret = AVERROR_INVALIDDATA; -fail: - rm_read_close(s); - return ret; } static int ivr_read_packet(AVFormatContext *s, AVPacket *pkt) @@ -1410,6 +1393,7 @@ const AVInputFormat ff_ivr_demuxer = { .name = "ivr", .long_name = NULL_IF_CONFIG_SMALL("IVR (Internet Video Recording)"), .priv_data_size = sizeof(RMDemuxContext), + .flags_internal = FF_FMT_INIT_CLEANUP, .read_probe = ivr_probe, .read_header = ivr_read_header, .read_packet = ivr_read_packet,