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 9748546B9F for ; Mon, 4 Sep 2023 11:28:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA6D068C7C2; Mon, 4 Sep 2023 14:27:48 +0300 (EEST) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2033.outbound.protection.outlook.com [40.92.74.33]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1B3CF68C7C2 for ; Mon, 4 Sep 2023 14:27:42 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iQnFCPY527ezKxtoJ5tQzkWaenz4VEkUs28F2CN6Q8LMsZbdixyMWG9MjlTg1ZyqEcvSl2HvFpcZ32W8xltXQyuS7LRLTV40eNmibCICGl9N2Xm12xdQRqeWqbPCF7mf1Rd8WrTuL2nIIO3UMnZ364lcSeMFkR180b7zyWJHoL6o5f/figGu/Esst0rKowbRxNEgTrWctSkje7m3hYoMrTYBvaHMVLQ6yuvEh1HjTU0hsimwW9Ly7lSA9hRZLTYfqwUfML2kSAZ7NOWmRBoJdfm2W07TrRUh4jp/XwX8eBTCUJ2Tv4yhfS4e4aqHb+kSYXi1mgUs2mZgzJfhN5Gqjg== 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=saW0gQOTvneL91ADFzWszvvnxCqZvGzvjEEUyCOCYCI=; b=H/GyIs9HTTKK2gY5ObgXXWq7Ujdj/GsfTtkoWa8GomZJKQeN6CdB+YzQ6mZLVCIIssQYvKTcFKloTmby2oS0XXIBTbrR7lrxP/W7NIaR2xoPsStAsTk/nhq5v37T44gHJUYv5PIyTX9nWFPBRsAQUfsexIlt4xoELviIn6uWb9LT0xOjAAJbtDWLicmn8Juy5zSCc3uwjlTJKfgW/IloGFyBOshlBSKnxA7mSCbW6MdtJE3Mse9bW7PQtQhILH3sACfe9u0w2Mv/UJU5bpidKopiECuGBSNZKIrmyaFhUIp+jpaNesDQ4wQwo8GO4jwCDn9H6wt6U76l5iDWl3nJaQ== 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=saW0gQOTvneL91ADFzWszvvnxCqZvGzvjEEUyCOCYCI=; b=pQYk7y4jf8v7GxEXxsJZ0spE+N9SznSi1okbUea7pHjTGYxXd+dM7b9piNC0KlFjyFbUCBi1xAyizq/gE6tcFiqD1fEjdb3WzCNHXgmB/ZGDzf7YFA87v3lFx3/tFqheiu9+gnFPYS1M0xYvorKLSo+2eef7XaC15BzbcZGHod1pJEEWFe8PkL9dyAh6u5HFhVH65vgpMuTDk/Bkbm0tYbWfLDKRJy5gr6GQRaEsnvJ0UTqK7tcKLFIGQE03D8aQtjrKj3IacMCxxD5zM4YZ43LO5nU9c2RwgZFIazvRci4I3FgtTHCj2yaK3ugHFsdTM1bxsQ1fNTDum2SOZODpxQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU2P250MB0333.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27a::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.30; Mon, 4 Sep 2023 11:27:04 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6745.030; Mon, 4 Sep 2023 11:27:04 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Sep 2023 13:27:43 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [XYS33ftyFaQNjTAmBccWjvT3vKZDQvwv8ZE6P/0g814=] X-ClientProxiedBy: ZR2P278CA0078.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:65::13) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230904112759.2652347-3-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DU2P250MB0333:EE_ X-MS-Office365-Filtering-Correlation-Id: bb8fc25b-44d2-4704-0516-08dbad39dd66 X-MS-Exchange-SLBlob-MailProps: ymJijV9pwJn0y37jYEfmpEAet1qI4rmTUYYcRwpljRzLRoXTwYgb25Sfqvvvm4p4QCyN2PvTgpuMdLYNS7y64maAgUFqtx8zS/CPDyGPRC8Mcw3JzSlYZTgdLYv2vpp/VMkHeYDBtD1q221g2M4mah/f1XujGpbMOelpVGyOIHNSXC7zoZHyX4jlJt+7Iuh3/+CaFoyShZyga9AHhl6ccE7MOmfNyunU3D0oshZ4D2qAURYk5FPtnVVNPDbgf6qWJZMrd8shIpfT7EW78XpKy3NAtrTBLrF1dqHfUryUHi+Ef7Fni84RnWeZn72sggJIuW80t17/fEaGaZyb+rQyCsLwcbg5HK/GNnA8ie0/x22/wkI/XBXUpAX/yt7LCQlaWDcR7ztd+y0deZxD2MSWcZCHzVq4xp9LY0GBCJ/LjJHkZ+eqkavwa3kUxOC311r4LJaYNn30Iyf7lpW1B+ab/aN1zoCtp82vsEhyhI80zfb4rDSofLq36Gox5pRlFIpbiFZpDr0CFKswmDBXA2vMHF3ovqf5MNx87DRA3OXdGXpEqrKSiYPb4AlzSw4Jxi7QvvYdh5K8N6UosBi79ifBCN+w/jAVbx3ksirEbwcGT+btx8MD9Cs5DUiyDrc3k7WIUADy6tKDIEkH7TwmqxdFfYbVCPwNuB/bgw+P81CGFAXSqkqX26XZsJAvZ5gr2vlmt6YAGG76Bn6MreIrC6yvbqKOCWXenI2eaqr8VkEMDmKNVuWxeJ7dkviKB3vVQWH/XuRtoEP4jrWv3N/mEjrHHiRmVh/sidxgfOpIxEexMmVMBYj5D/sUKyVEID+zbYxf X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4i/nNissAlrtzsYmuVmot+OAvWk7qln/8E9L9amns9SbHXzhesqZ/Lr2QlPu3vyQ69+VhTVVvqVjneRR82ljBSz68XNm/xA3yOlg+5lL1Ck47n/hYeECcXuDc0ccN31qWknf5K7tcQap3U7pHqiqYsRKFb2a+QnC8FtocBUHFXiMjzn8YH+YQ/X2iy3qBLxVnv1Wxd1ZI6sa0MpuPr4DJV9l0Nw+1gPyPwsSa+TzkiaMoaib9S8t3WPtsxeIITvBDfjisK0OFErj/EqfqaIuHEDj5kSGgTnrsgxwC7zOyVxzgKDu5WQhv7Io/H9UM43zoW8bFfRiCUL2q+m9Riac47zqYNlfDsyFwbGo7oLL8uPCo03gJwJppbzaKfGmMuWZh0yjGVTnHL63bTU3XkhtsPRKzqRnH61WV5jHIYuQ7cKPOQ0XVjXJx5/g9w2d0JyADNbZYpmaPTvaluEie2ICI6TAobsg908togt1xC592D0dt4a/KmzRR5NVuk8YukGvTf6zFFyIGjR89VTUheYZ4yCb0gc/v4Ehc98uEVOFjlKUEIHgyN2vFXupA9p/nip/8VF3BMzyhd5thq34Mk+hYTBEaQkWEFvEuOpKoSl5fRqeMAuCDc6Q+GRwCgmgoW7W X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hiqO1klEUs2NLrLbzH4X9hZtpyJT5bdYYBLdT7nd3sTvy5148h+Ao6nJRqaS?= =?us-ascii?Q?7OL2rKikbfbiQaQnqs1/hQ86iGSX8ALNHMiNVrbGuJwYU8OKkp6mOESMWAAD?= =?us-ascii?Q?sl34qwnfNR0lc6lAc8PGKjd7JYyqNqDR/0l1rf9XHkoOjNQ9w0Mejaxxyn+R?= =?us-ascii?Q?y32MOJliNEspcH+wCrPR8E8ukIdTNGnsO6Dbi0HzCE+7FxRJ3WqLh1Ulj6Sj?= =?us-ascii?Q?nsy8yTWt1ZJKeDJNwxvZeB4fcRc+jgULJ2SvI0qF5wz+OPu07g8faRCoTX7F?= =?us-ascii?Q?s3Zh/6EfS0Er9I0Ksm18uXEwNNsLj3GmG1hTzB2P+ntC62Eid9ew2LGB9iZJ?= =?us-ascii?Q?DIxVAYI656Gj4d7PSInzAtRb0nQm5zf33QiGcCDNVKMAo7OZ4ucc7Ea01zwO?= =?us-ascii?Q?UGWlGnWy07BgCZkhtaCNAv/4laVENJGhlwc5pK0HMcm81N4U7MmKwahBGIg6?= =?us-ascii?Q?d0YDd/FxL301RPDd7QT3OSPd5tGkiAkYLoonccpTi42d9zZ+xwhUdu6/EuQ3?= =?us-ascii?Q?yKGMY7uS+xp/GprZDGMhR7Bv+I6KKikckVTGpXPZvcBnWjUBFzaRy7lCCQbh?= =?us-ascii?Q?ccc9NUy4Kt/G9W+tioAxwhq/F06th/OF+TC1rC5P23JuWzqTZ+OWAWwBjg2o?= =?us-ascii?Q?h+tPkOeGM65XnlJI4azPZ9783dJhGw2wO/gnkBlKZ/DYPhV2mKrFKZTPBuTc?= =?us-ascii?Q?MZgOpFYudjlijFuQ3JANd2qtWOjwMuwHvO/m5be/qrX/Ik9fl4OuMXyu6fxo?= =?us-ascii?Q?VFh8WwWjfvspRml2lZWrm8eCqrHoMqYqMMqxB72FXVnGMKyNukcRxuWzGT6A?= =?us-ascii?Q?4+wcDBPp9Rnck8YYpiIcUtSehU0j0qSaHFqUCZecLBRV+2wZuaBXUdOuIN3f?= =?us-ascii?Q?cIBcYVoRsDuOIFj5XDFjIJ8iwlevPtMalXL274UuJzp95KpjKe68CpAV40gY?= =?us-ascii?Q?qw+98rEZqpPbqS5OOBFNuurItwGG8xL5HlePCjVl3A/GWFbSSM5IQnIvMFgN?= =?us-ascii?Q?DRWpuo6Np5nWX3Rf9yz2teQ8L7tuFzs4g0Ak2UNBhm3Fcv6No7ozQR4rX7TX?= =?us-ascii?Q?tjKThtdQ2ueIvbmlpfZiI2tEQPiLpEPid3UuZ5tIhgJM9uX9ZVqQIPKZa/O6?= =?us-ascii?Q?61dcvOooeM0fYb5Rv9pjEkiKCS3QV/QceJGo3yk3ARqb7pDw1O7RI8OCUEnK?= =?us-ascii?Q?qra49f8/S1PWdKymyGggg8miHqKAv8XlMl49melHpY6etF7MTU2B/fuTRDXA?= =?us-ascii?Q?ZRXi8rqa2Mq+hiHs79oL?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb8fc25b-44d2-4704-0516-08dbad39dd66 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2023 11:27:04.4489 (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: DU2P250MB0333 Subject: [FFmpeg-devel] [PATCH 04/20] avformat/matroskadec: Redo handling extradata allocation 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: Up until now, matroska_parse_tracks() has two main ways to set AVCodecParameters.extradata: A generic way via CodecPrivate (possibly with an offset) and by allocating a buffer manually; the pointer to this buffer is stored in a stack pointer. In particular, the latter method is problematic, as the buffer needs to be freed manually in case of error (currently there are no error conditions between the place where it is set to AVCodecParameters.extradata). Most of these buffers are very small (<= 22B), so replace the pointer to an allocated buffer with a stack buffer and set the extradata directly for the one place where the buffer may not be small. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 60 ++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index fd28ff8ab2..50a159460d 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2501,6 +2501,10 @@ static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum AVCodecID * return 0; } +#define AAC_MAX_EXTRADATA_SIZE 5 +#define TTA_EXTRADATA_SIZE 22 +#define WAVPACK_EXTRADATA_SIZE 2 + static int matroska_parse_tracks(AVFormatContext *s) { MatroskaDemuxContext *matroska = s->priv_data; @@ -2514,8 +2518,10 @@ static int matroska_parse_tracks(AVFormatContext *s) EbmlList *encodings_list = &track->encodings; MatroskaTrackEncoding *encodings = encodings_list->elem; AVCodecParameters *par; - uint8_t *extradata = NULL; - int extradata_size = 0; + uint8_t extradata[FFMAX3(AAC_MAX_EXTRADATA_SIZE, + TTA_EXTRADATA_SIZE, + WAVPACK_EXTRADATA_SIZE)]; + int extradata_size = 0; // > 0 means that the extradata buffer is used int extradata_offset = 0; uint32_t fourcc = 0; FFIOContext b; @@ -2795,9 +2801,7 @@ static int matroska_parse_tracks(AVFormatContext *s) } else if (codec_id == AV_CODEC_ID_AAC && !track->codec_priv.size) { int profile = matroska_aac_profile(track->codec_id); int sri = matroska_aac_sri(track->audio.samplerate); - extradata = av_mallocz(5 + AV_INPUT_BUFFER_PADDING_SIZE); - if (!extradata) - return AVERROR(ENOMEM); + extradata[0] = (profile << 3) | ((sri & 0x0E) >> 1); extradata[1] = ((sri & 0x01) << 7) | (track->audio.channels << 3); if (strstr(track->codec_id, "SBR")) { @@ -2812,15 +2816,13 @@ static int matroska_parse_tracks(AVFormatContext *s) /* Only ALAC's magic cookie is stored in Matroska's track headers. * Create the "atom size", "tag", and "tag version" fields the * decoder expects manually. */ - extradata_size = 12 + track->codec_priv.size; - extradata = av_mallocz(extradata_size + - AV_INPUT_BUFFER_PADDING_SIZE); - if (!extradata) - return AVERROR(ENOMEM); - AV_WB32(extradata, extradata_size); - memcpy(&extradata[4], "alac", 4); - AV_WB32(&extradata[8], 0); - memcpy(&extradata[12], track->codec_priv.data, + ret = ff_alloc_extradata(par, 12 + track->codec_priv.size); + if (ret < 0) + return ret; + AV_WB32(par->extradata, par->extradata_size); + AV_WB32(&par->extradata[4], MKBETAG('a', 'l', 'a', 'c')); + AV_WB32(&par->extradata[8], 0); + memcpy(&par->extradata[12], track->codec_priv.data, track->codec_priv.size); } else if (codec_id == AV_CODEC_ID_TTA) { uint8_t *ptr; @@ -2837,10 +2839,7 @@ static int matroska_parse_tracks(AVFormatContext *s) } if (track->audio.out_samplerate < 0 || track->audio.out_samplerate > INT_MAX) return AVERROR_INVALIDDATA; - extradata_size = 22; - extradata = av_mallocz(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); - if (!extradata) - return AVERROR(ENOMEM); + extradata_size = TTA_EXTRADATA_SIZE; ptr = extradata; bytestream_put_be32(&ptr, AV_RB32("TTA1")); bytestream_put_le16(&ptr, 1); @@ -2910,10 +2909,7 @@ static int matroska_parse_tracks(AVFormatContext *s) } else if (codec_id == AV_CODEC_ID_WAVPACK && track->codec_priv.size < 2) { av_log(matroska->ctx, AV_LOG_INFO, "Assuming WavPack version 4.10 " "in absence of valid CodecPrivate.\n"); - extradata_size = 2; - extradata = av_mallocz(2 + AV_INPUT_BUFFER_PADDING_SIZE); - if (!extradata) - return AVERROR(ENOMEM); + extradata_size = WAVPACK_EXTRADATA_SIZE; AV_WL16(extradata, 0x410); } else if (codec_id == AV_CODEC_ID_PRORES && track->codec_priv.size == 4) { fourcc = AV_RL32(track->codec_priv.data); @@ -2959,17 +2955,15 @@ static int matroska_parse_tracks(AVFormatContext *s) par->codec_id = codec_id; - if (!par->extradata) { - if (extradata) { - par->extradata = extradata; - par->extradata_size = extradata_size; - } else if (track->codec_priv.data && track->codec_priv.size > 0) { - if (ff_alloc_extradata(par, track->codec_priv.size)) - return AVERROR(ENOMEM); - memcpy(par->extradata, - track->codec_priv.data + extradata_offset, - track->codec_priv.size); - } + if (!par->extradata && (extradata_size > 0 || track->codec_priv.size > 0)) { + const uint8_t *src = extradata_size > 0 ? extradata : + track->codec_priv.data + extradata_offset; + unsigned extra_size = extradata_size > 0 ? extradata_size : + track->codec_priv.size; + ret = ff_alloc_extradata(par, extra_size); + if (ret < 0) + return ret; + memcpy(par->extradata, src, extra_size); } if (track->type == MATROSKA_TRACK_TYPE_VIDEO) { -- 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".