From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 08941496E4 for ; Sun, 18 Feb 2024 02:42:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0ADE968D324; Sun, 18 Feb 2024 04:42:51 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2075.outbound.protection.outlook.com [40.92.89.75]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DB45D68D314 for ; Sun, 18 Feb 2024 04:42:44 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IJBY25G7MA8KUVnEHeTMYuKPGbXrKjeVed/g9U/cIWAicS7xfmi6EUcOVz7dSYe7u9RVfEWj4nB6Y6epSoxJIHh4h0bbGhqBMzcjg9GCCb0lfFIQy1nrA6QsyjOgvJgXiGrbCcj6TxDDPajJ1/iAhtrk2x8Pe6b6J/bMzZsRTRF9FeDTOvppRaHCL1IYDS46JhADcyEXdYWvjfiE0oVmOqrXkQeisJGCqI+yNkxGgl/kAEJO3mS6idPYhxm02Mxqd7CDxqkd18j14bN+T93o4MfZvt7Z5I6G5rCcgMbqAtkNrX6b4jLf2lTmy2L0/zPtmHJHYALQxwyqIUXRBJswUg== 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=8yafLX/6PQ68V6tCQrkuuznnlEljL7dKXiBCxsMm5F0=; b=Mcb5XnhF2IA/g57A0frKI3I21yRMaLxVRaYVVOqO13KipGyhmMEh4t8D+zn6oN8VmMFiiuQRUYjmf/G9TJfb4Z3EK/+b/DxK60K7FUSEE0J+cUY7XUxWVLHdRoadM8F4c/DH5Up78AXK4oG/a9pwlAj9+w7gIlQ3OXftQe2NE3eSkcnzRFMJYjJ5uq2ekarTZUpjG12jBrOyaVUQiwRllcKl1XmwIypZM9dYWJL9msG3gHA49oe3hGB/RYX12Ix7yQeglms2ZHbybhXxMMLApZRM3kNYdMMPbFXgb3kMTQRHlv3wZsLbDvrbOaDzSnJfi79kO2Fr7Ne5RSfoN57V2Q== 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=8yafLX/6PQ68V6tCQrkuuznnlEljL7dKXiBCxsMm5F0=; b=AVXSWtIExZRG0RotN+fpr6Ccf/jGreVYq6JWYA3B2mXg90sf2476mhpL3vYQaA2LPJo3eGC/G32XSliCgKIro7q+h03RG4d0/eY7Wcmwl1AGJSEjMcqgg5oWAbl1ShSYb4g0+bRkXp22XzXiSw3kFe92KYPqedocY+73zfh2mzUWqkqMb+PfJ3sP1gtQZRlgAkfGlkeUPBRwDVBQULiNhNmaIg2JphZo0Hf39B1CQ2xoQoIkZGPraUSBNOEZbUsl12Bd5yo92FDE08hBAlYctAluHn9Za3d0DC9qx4ghFhsbBc47dFHA3EAOnaiG03okHJs2DJG6L03elzcTqrWC4g== 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:41 +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:41 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Feb 2024 03:44:25 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [iqEIoBSvtHgPAVgxcIJTZWDy36KwfoKNgJaaJg6DSyA=] 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-2-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: 937d6548-6c64-4477-c22e-08dc302b46d6 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UnRfjd79zx9C5IGHPOyCcArh9zXTHzEC08KzLK/ToxFETQHEezyEzLwvmxzQh8zzkXNOl2uTtrB9+RPfE22BRYkU1i4TeEVD4Ev8qYVOCjmDCwK13WEPqUDDIkwyUJwyw1nr0N5o5rgXE9gC2ULrDNglCAn34v+oXX0tFkn7EMQA6ZSoNDhsr3nrSiZJNhX2vIBFuRZVRp6ttlJ+83rO41G4S5Ca5Io/K4Q+8MTSLiYcLKalQXcqiyhT6Q8evXJNnNcMydi75Naws3VxThIgHvEjUUm/PTI2cYhoJcqEVKH9Ui26UyzSRx0y6iNzRW/cYw6XJAGlrj+4J3h/vCqGKZU6UhM54O/m06GHJ/T+baUq72NEYwpUponboLrMIEOW39NmzFZxo9b0387Gwx7YDAtvzxF0lJFsfsNEtot2Ux60s2WXdiqgzH6esWWaSclM+HtMPqFce+TNPu/yyLksOFlzZkLEPZ6upNb6bpJPwUwfVEKogJbrEa/WWQks4/xGZuRFJYLirNsZN1xvern0IGJUH6jU8BmZ67UKiqXAsacYcZuCcAuLr5Tvn7Inbk+Tpr3QbeVqzSpfwUU9vSAKqwhRRTsMY+FhvXEjlTbnPeE1dwFnm+lzG3mLXqKzNuZe X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Qc6b7RHR2TQFMRaoxCcxgZCdwjiAOlxbsavyalKp2AXO8Ovz4PwBTLQVzfSW?= =?us-ascii?Q?Yj7he/MArz6VHioz2tLkz6CjsKUv+h3lhtDXawhBPA7JnLAY9QpdeLg+ddYT?= =?us-ascii?Q?Oxtj1UNE5wJk13fVZAOntUWFXLUapcVN7NfFLMO/SrOvVuxfwtwxT9V/Ujn8?= =?us-ascii?Q?N5RbNNhXmNWAX6sMXgFR6pwvVeDkSy02N+z/pwFTVSLp0nX7MiYwATFlydIg?= =?us-ascii?Q?Cv6x2UbOoCZqupheAGzd06Oq8z1C2jabl+/XJ86P/n5pAzNBByShbRX7a2bl?= =?us-ascii?Q?RTg9vECdz/G5EqfI/JoD0sDCQ1LXsV1h09LbXwOm8JWgYGzCbEoug7SVxQXE?= =?us-ascii?Q?hUepUUeoyaHJxSBZFMDlFDt9kAauTvR51bdgpJibVafSaJ2gBWj/DZ6Y1uPP?= =?us-ascii?Q?vNQfWAYdRwl1uDhLyNd2RJuAU0rgwRn382KmBVYGBmYNbpH8kag5HoS1urlE?= =?us-ascii?Q?gt1K4nT/E4xnFBNHX4henm5En5EfKlsFZv9VlRBln4yXRAwTxg2Wz9NCmOkQ?= =?us-ascii?Q?gXy9eU9jbEHK1PqPm8LeUCSky8pZjI1s02X94O2cwsyxt4rflTZq6q+YPvwC?= =?us-ascii?Q?u/PpsEgNmoqqdEYtlAd0ANO5AA6KwHMzpzK5ZJmoGPWOGSHBcFbCEQXkvq0W?= =?us-ascii?Q?4va4MPVJ5RxvoeLIqcXYDav0Xq/HSWa49apYjaYaoABYPBm+68+N/baQCBq7?= =?us-ascii?Q?AnfrRW2app9Qx9HonMqtILUZr8UPhedMGp1z+oDlfJvNRMqUEc2dAkbnQ6RL?= =?us-ascii?Q?nXfNCaIZvrk51/zaAVBfmMji9Nm68h1QAkCiIbshSqcVXfnByCj4TRBF6l/a?= =?us-ascii?Q?R33SgoJg6ShnkZBm82oASyL9c7QK670p1EZugoYUC76go+9NcdDIcvXpglqI?= =?us-ascii?Q?mhoMyjAR0Un6GKvSpI6VaLiW3P7i44gj9R8H/U5fgkFHauVknj3//ZDj2PsE?= =?us-ascii?Q?UuWyfKAqR/ZMyZL/bvE682PhtsB/Mhe4vnsELsIQk09rvwG3oMK9HRRDmkBR?= =?us-ascii?Q?SGg0LrArRR0gWryxmIF94o3O61x2I2IzqUulMEQQxjXr7JAx5ch279KbjSmg?= =?us-ascii?Q?MZQomTuuw3PYsgx8pmj0Gkra7LJTRxMBE51xVM65dbFEA3typjsTgW7KL5Xe?= =?us-ascii?Q?5+NUopBHipjgh90zo35sVqT6XodYJG4drm+inoD43EQkwd/l9EmfIgQEoHwP?= =?us-ascii?Q?wi2hAZ9saarDK61TV0E2FoPL8icqdY0DRXV4a/u8VKmFdsmC9pLIUrI9whO2?= =?us-ascii?Q?DYi/+wNFQYxhO7mQ49PgEmf5mNMr4By24cO9/5yRRA=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 937d6548-6c64-4477-c22e-08dc302b46d6 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:41.1774 (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 3/5] avcodec/bsf/hevc_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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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/hevc_mp4toannexb.c | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/libavcodec/bsf/hevc_mp4toannexb.c b/libavcodec/bsf/hevc_mp4toannexb.c index a695cba370..f5424e95b8 100644 --- a/libavcodec/bsf/hevc_mp4toannexb.c +++ b/libavcodec/bsf/hevc_mp4toannexb.c @@ -38,13 +38,11 @@ typedef struct HEVCBSFContext { } HEVCBSFContext; static int hevc_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 type = bytestream2_get_byte(gb) & 0x3f; @@ -54,8 +52,7 @@ static int hevc_extradata_to_annexb_internal(void *logctx, GetByteContext *gb, type == HEVC_NAL_SEI_PREFIX || type == HEVC_NAL_SEI_SUFFIX)) { 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++) { @@ -64,26 +61,19 @@ static int hevc_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 hevc_extradata_to_annexb(AVBSFContext *ctx) @@ -100,10 +90,20 @@ static int hevc_extradata_to_annexb(AVBSFContext *ctx) bytestream2_skip(&gb, 21); length_size = (bytestream2_get_byte(&gb) & 3) + 1; - ret = hevc_extradata_to_annexb_internal(ctx, &gb, &new_extradata, - &new_extradata_size); - if (ret < 0) - return ret; + while (1) { + GetByteContext gb_bak = gb; + ret = hevc_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; -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".