From patchwork Sun Feb 18 02:44:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 46338 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:dda5:b0:19e:cdac:8cce with SMTP id kw37csp573576pzb; Sat, 17 Feb 2024 18:43:13 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVrHRjL+58tVj4inkWAgcI9XFrUUoqv7088xgvS85SzRGapHByQL1VTChw9LEAH8j8rWtoyRqWZz6gE5U+XIdYwzKtPefNkWrrxqQ== X-Google-Smtp-Source: AGHT+IFbeinU/uCbc3odaizgphiQq3VvIpXZOxUb4aWM9vpmXLboXQHTPv3OCLR9g3bnunz1ujMK X-Received: by 2002:a17:906:1397:b0:a3d:2356:c582 with SMTP id f23-20020a170906139700b00a3d2356c582mr6170426ejc.48.1708224193008; Sat, 17 Feb 2024 18:43:13 -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 gy21-20020a170906f25500b00a3e6a56e10bsi182194ejb.485.2024.02.17.18.43.12; Sat, 17 Feb 2024 18:43:12 -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=lrE061rR; 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 A2E3768D330; Sun, 18 Feb 2024 04:43:01 +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-db8eur05olkn2066.outbound.protection.outlook.com [40.92.89.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B38A968D322 for ; Sun, 18 Feb 2024 04:43:00 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SynURZnHSORWfdxP9YPibqhQnIqH2q82xw1IA8okMRC3jFF7DrUGv7CoraongRxaK9Bs+GVij0Cw4GhY9YS/DF2hrKRdDspQguiKMSTnpSkM+paimgdUfOrrC5uUfc1pB8EUt8C84nsJDzqs4ogVffdZ3a4ZA/HoEWik5aHuD7tzjt5E/fmRN2DfOf1nkBnN/LXqLPQSL00Zjmk6c9nb1VkJg5NokhDEisA8YLY9OguDJMmheQrg00hSdg6vLy9OcnSxu5MYpnnEE037BPAsdURWY9z8y5lIC4LXOm7I928eNXLRrcbFVEjlVdBJJXs4RBg+UgyHnMed2GbxERDaSw== 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=lnSgkqIQ1BtvY1cWWNnt+5woXT4ntnFx7gIdF2+3+Is=; b=kGaTZWfSORK3Azbyicfflc5a80kxR3e9ijAavzohWtlgZHXtVCb6qah22vs6hjm3JaXaurXyfBW3ADHD0asYcL/gG2HAx1KoqB93ySOutbSAPo5QJo5S8BP6B+bGEJ0uxLPIWhEfMNFkeF3x5dvsrcNj3iwYhcSToedMQXI5oMx7NhqpGabKY/hNoRXRmDI98ZSRVY7Z5ItPYCjAvljYmAvsTZPd1r2dnJy2uEgjRWpCTCoTZ2etIaXc/GMsvof/PqrBVIVlmWc47BE2oVTBVA8AtoZvRnTO2/HioEFLWGjJCrN147yzmmvuzTSsh1CeBEqB0YN6gEVOSI7CI3Bm8g== 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=lnSgkqIQ1BtvY1cWWNnt+5woXT4ntnFx7gIdF2+3+Is=; b=lrE061rRaYUXnm3QHWKNTc1f8JIYdHKeRacShwSoZ4PiW+hUt8bdNL+FZ5QDmpI3azghS/Kn6452kIyzRsLtHZw7RFKLADrj1EXHFhZNYXFt1rEF0VDfXhTu4gfKhytC3Tkd+mhd34iMID2hvVMX6J55+ccuoJEumTk0zkc/FQlGzxNh/UQopQgXXVzZVVpT/7VST/ch4l8v1Yov1oyiVee2P9RaNgNs2FL7a3gG6iAwZa5ZzuRGFFsFFgr7TqIeTrKrto9QsBs011xORkB32nKA7dbMimPsQdLeEE+TbE71OWMcy3EamNLc2ikPmQjAlyrok42gMVF3aRvWtkenjA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0054.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:359::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.32; Sun, 18 Feb 2024 02:42:59 +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; Sun, 18 Feb 2024 02:42:59 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Feb 2024 03:44:27 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [oLC7BCn7uUiwQdK4hp/t8GvhFNy3xrDJRiGIFDuu614=] X-ClientProxiedBy: ZR2P278CA0034.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:47::15) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240218024427.3103449-4-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0054:EE_ X-MS-Office365-Filtering-Correlation-Id: 942ba4f0-8659-4e5c-ae69-08dc302b5180 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UOoFwI/KT2rGX99ChSa/ldkAtH5pQPmVr61db2Z0sODvhWT5Egg/QYhXfx83NnfNqkYIAt9OM0xGRn/NrfGhfXVNnXFyHNPZx/FMxzLjCw2ELuoTmkgqRL+yiFjTk7XXR4FelN/l54MdcJkWU5L8WPBMxPdPHZ2GRpzXV8IsdENcCS8L1fQ10xup1dPSnZOblVq3M5rROuQ9E874QVFHMPrjKVZSyxPDCkKRvyFpdCQoEZdxJjuj7sVriX30p9Ebc7y/lEeMGn7FB+GO9yvBtj5pookomJN+hwrPzvha288c8pEOmihNmFdWs+zENcKMN3nj0lBx+cpwSKK/KPhWB384+1qKQ6+eISENMr16vrkvB4LxqdOizZgXL2gMh7aF+LiZeqP0TgysJhubcDllrwavQMVvDVWeDkDOnODl/G4i3r18IZ8JAtKLknsWfK2569EYdhfDvzrxmAWzEBaRTwP10cUWBFF0+UL/aaWMHF35s7NzB7G0KiO8cY2bEo5J3azJ23PQ2C4k35KGDI3oh50x0MEQiRnS3Bvy3hGxGJglpL8SD4a9VzbdFhyS2ET/PtODAh0ekKPKBjy//rZ5Kn2NOfpTT0xf/tQ6mBhMMa2YWzWsAXWWdGJCH6SeOi25 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: w6YDdyNcPGoFBeAaqvLTef1MRhbFq4CCcV5IPW5WfRztNX1F18hsSvj83Ym2/xha3YeGoxDvMYp9ylNZ6AS8YKyd5ztcs22G86/eS4rzPyemm3u5aMdbmyGGcRq8zRV1Wyb5/jTJO5AXsxp7HRcjgyRPqwaRQWtkjgBBAcC3y+42tlLeAtbPEVnW+j+81SRdWe6qlageUX6/Glsc741a6xHfEGu7JxIJ8fSJtenUFsheNmST9dHC9Vk5lJkBJPoxooOvFCMNURzwH1PG8U/ER+q0UrGhOoO8UhmiPBEjQ3/yOUK8STSviKGkm9oNg4RX6wyRcCCsKQCk8bpW9Mwn82crr6J9yTv58tdA4++0rY5pWs0pD4weWOgKw+A0jDjMlVrkMjE6HO3BLccQo1Pj+4WXE8MzIQS2EX4dj46UQXV6vPWqHqAyX91m2NvaAAJzrAgCE/Qmm8i1fk2kYEQ/zz7wGexhQ/mbVnHICYxye3IKPf5aO4SlAkJMTwKUPPz7xL/QGxn9U4z3KOC8VLEU4DKg8CnuTlL6l6iVf+D9MOKVU1MlgasLaIm1JIBfEM+2rtnS7OQK1XO8gg7PZLBQ1Rk9MbUtEMLwdwaaIwMgAxR9w9jakghRpRZykXKHXRtu0e6cc2vNzlKsJf6hY7V7jcNhay749ThBTo4xZOMvGJg8ITCYBzaSc0giRkLeh/bztVJfzmE4abfe/omxyENL7yYIgFl1Y776lpWGy7Fd0ryKGbCUL6VJ6rfGYEXPCdZyHK55rHuuzGDt31T2th7vMu9bg/HfBvjZyEMCyU2jO+T/Jp1AZU/UCNLm36Qh/rdUbyfjMo61wj0k30aPaCmqjyRgFQPAq+yvahNaQOxbOPJErTXi4crJEuNrHydD0hUplVZP1mmuIIPdw+QluSG2PNxcy+EjBgKD20TAMuPR09fgH3L5CnVB2nBwLri/B0+F316BH6cZLArA62G8fprIlP7RkJW45X2riroL4kTKAUW1mo6asM+mOZPMNP78mg8XicHdoZy4xljbfvh1fnz8AY/Hxj4vgIK53uuYDllDLDZNM/k6++DOIr2epFf4Fnqkr12r1l4zVV1QbcYNzx6kFDuNZvcQVgsgngS6YHJ+i/hF1VnCY4GwmbCcAkvQlfz0COJf/ntquchaTgpIvvS95ncJ0gLqA3Ko+YJdrpQCm9NLLqIGZjjpr/OM0xPikiPhypVoxwxzRW5947yfthoKKqbgk70d5jNBRPeiFd5z3fjB4W8NV/eewGQxx0ILGYLVx5Piim/C45HsNdkUZPGYFg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 942ba4f0-8659-4e5c-ae69-08dc302b5180 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2024 02:42:59.0468 (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: AS8P250MB0054 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/bsf/vvc_mp4toannexb: Don't realloc when creating new extradata 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: OXw9+XcKKzw7 AVCodecParameters.extradata is supposed to be allocated with av_malloc(); av_realloc() and its wrappers do not guarantee the proper alignment. Therefore parse the extradata twice: Once to check its validity and to determine the eventual size and a second time to actually write the new extradata. (Of course, not reallocating the buffer is beneficial in itself.) Signed-off-by: Andreas Rheinhardt --- libavcodec/bsf/vvc_mp4toannexb.c | 51 ++++++++++++++++---------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/libavcodec/bsf/vvc_mp4toannexb.c b/libavcodec/bsf/vvc_mp4toannexb.c index bfb0338116..1879c1fab9 100644 --- a/libavcodec/bsf/vvc_mp4toannexb.c +++ b/libavcodec/bsf/vvc_mp4toannexb.c @@ -38,13 +38,11 @@ typedef struct VVCBSFContext { } VVCBSFContext; static int vvc_extradata_to_annexb_internal(void *logctx, GetByteContext *gb, - uint8_t **new_extradatap, + uint8_t *new_extradata, size_t *new_extradata_sizep) { int num_arrays = bytestream2_get_byte(gb); - uint8_t *new_extradata = NULL; size_t new_extradata_size = 0; - int ret; for (int i = 0; i < num_arrays; i++) { int cnt; @@ -55,15 +53,15 @@ static int vvc_extradata_to_annexb_internal(void *logctx, GetByteContext *gb, else cnt = bytestream2_get_be16(gb); - av_log(logctx, AV_LOG_DEBUG, "nalu_type %d cnt %d\n", type, cnt); + if (!new_extradata) + av_log(logctx, AV_LOG_DEBUG, "nalu_type %d cnt %d\n", type, cnt); if (!(type == VVC_OPI_NUT || type == VVC_DCI_NUT || type == VVC_VPS_NUT || type == VVC_SPS_NUT || type == VVC_PPS_NUT || type == VVC_PREFIX_SEI_NUT || type == VVC_SUFFIX_SEI_NUT)) { av_log(logctx, AV_LOG_ERROR, "Invalid NAL unit type in extradata: %d\n", type); - ret = AVERROR_INVALIDDATA; - goto fail; + return AVERROR_INVALIDDATA; } for (int j = 0; j < cnt; j++) { @@ -72,30 +70,21 @@ static int vvc_extradata_to_annexb_internal(void *logctx, GetByteContext *gb, if (!nalu_len || nalu_len > bytestream2_get_bytes_left(gb) || 4 + nalu_len > FFMIN(INT_MAX, SIZE_MAX) - AV_INPUT_BUFFER_PADDING_SIZE - new_extradata_size) { - ret = AVERROR_INVALIDDATA; - goto fail; + return AVERROR_INVALIDDATA; } - ret = av_reallocp(&new_extradata, new_extradata_size + nalu_len + 4 - + AV_INPUT_BUFFER_PADDING_SIZE); - if (ret < 0) - goto fail; - - AV_WB32(new_extradata + new_extradata_size, 1); // add the startcode - bytestream2_get_buffer(gb, new_extradata + new_extradata_size + 4, - nalu_len); + if (new_extradata) { + AV_WB32(new_extradata + new_extradata_size, 1); // add the startcode + bytestream2_get_bufferu(gb, new_extradata + new_extradata_size + 4, + nalu_len); + } else + bytestream2_skipu(gb, nalu_len); new_extradata_size += 4 + nalu_len; - memset(new_extradata + new_extradata_size, 0, - AV_INPUT_BUFFER_PADDING_SIZE); } } - *new_extradatap = new_extradata; *new_extradata_sizep = new_extradata_size; return 0; -fail: - av_freep(&new_extradata); - return ret; } static int vvc_extradata_to_annexb(AVBSFContext *ctx) @@ -193,10 +182,20 @@ static int vvc_extradata_to_annexb(AVBSFContext *ctx) max_picture_width, max_picture_height, avg_frame_rate); } - ret = vvc_extradata_to_annexb_internal(ctx, &gb, &new_extradata, - &new_extradata_size); - if (ret < 0) - return ret; + while (1) { + GetByteContext gb_bak = gb; + ret = vvc_extradata_to_annexb_internal(ctx, &gb, new_extradata, + &new_extradata_size); + if (ret < 0) + return ret; + if (new_extradata || !new_extradata_size) + break; + new_extradata = av_malloc(new_extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!new_extradata) + return AVERROR(ENOMEM); + memset(new_extradata + new_extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); + gb = gb_bak; + } av_freep(&ctx->par_out->extradata); ctx->par_out->extradata = new_extradata;