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 ESMTPS id 87E8E4CE92 for ; Thu, 13 Feb 2025 06:46:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D8F6368BF3B; Thu, 13 Feb 2025 08:46:53 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2052.outbound.protection.outlook.com [40.92.91.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5E84D68B5A9 for ; Thu, 13 Feb 2025 08:46:47 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TxHmxBqA9MN44y06LB9MHbnozgfU4hpfjNeaL6rfXKzI4yNpKAhMCpeiybl/RKy8j77cEpAArYpAJ1dJA2Xs4ghLGGZoRLC5PhPMDePYqM6gigrt3VIWv2jTnPiM2tDRJvykvu2kI62/ZK2MydHj2NI/9wH7vDVF85pcrBkfvFinQdsyK/OtewuZAfUqo+MWLuOVi605T7d7VudXXcOOj5935s/8HymO69gGvYIVGsaQrrZszOEIeoO3Hs0ubBsfNIYsH4ZuHrGkaMbEqpdcUGCix93Nk6zk6hrwHuT9cii4xKMNoNtTx4oTnhyYKTfdANG83U1AyMkwMeejiRZumQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=iAS8rcZRjaFCucJswu1C3rP3fc1ErPROiY73JlWJs+c=; b=F69a4bIA4WTkA40+b/wdcLaav1VlOz2mCFVHwdFdWyrfunX0e2iN1qUrOnhEqcdT4WTeJxvvaDeXJxmCx/0rN7aakNSzeMttN4LGXj7O2OqiGccJv6SIMLH3Jm6mYHYsMzqCKnqMZ5nBv32E1Fh7cyxKKog9wqvZUb5qTORysoktSoT0hhzJSMqaMEHeZWdyb8uOIK94Yo3x2xoVgVcv769ZIxs/AYhtAwA15DOol78kJY6hgW/XzLwkuInq/4nwCwnXsAmmO4/GfQymLgcIZZt494QWNT6W+lERmFc2AZ15Vac996N95LYZS8qBV0rMrmMP8jvksKkEuC9pJGpFmQ== 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=iAS8rcZRjaFCucJswu1C3rP3fc1ErPROiY73JlWJs+c=; b=eTOJm0tp309fOzdhdT2ROcMgHfffMkpF8MIvhSP8ScSC9/fqKZ4tOVpbR/loKfehRV8FE6ck1BMSIddxF8Ll2FZvLcXhGxk9KPfFqFifte1bA5B22bzr5jVaJxWwMkWVBCG64YJiTkhDGbfE/YMObU2iB5BVnJCOsk2gjYG4SxU+dzasmzeNpbcDSNoUy9N2EG8kUABdMR5zsWhYpaEc5FlsYU3ax7nnBT6KgYEqMAzormV9qtwlwKH6Ohe1VMATPsP8U+MpZb2PLBbEPBO64yckhGSbnkEgSfATm4PDSxQOZorPJ4BzEkYMwOhvfCGihk6crANgG3pboZ1UJNPKMg== Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) by VI2P250MB1054.EURP250.PROD.OUTLOOK.COM (2603:10a6:800:226::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.18; Thu, 13 Feb 2025 06:46:45 +0000 Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::1f36:56b3:1d04:c7a6]) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::1f36:56b3:1d04:c7a6%5]) with mapi id 15.20.8445.013; Thu, 13 Feb 2025 06:46:45 +0000 Message-ID: Date: Thu, 13 Feb 2025 07:46:43 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250213000909.21112-1-pkoshevoy@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20250213000909.21112-1-pkoshevoy@gmail.com> X-ClientProxiedBy: ZR0P278CA0093.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:23::8) To DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_|VI2P250MB1054:EE_ X-MS-Office365-Filtering-Correlation-Id: 206a55d8-a9c6-4e23-2c31-08dd4bfa2e31 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199028|6090799003|5072599009|8060799006|19110799003|7092599003|15080799006|3412199025|440099028|41001999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VE90cUdtcXVkc3hWV0xQQTBKWEQyajNXSkZ1Z3ZQYnB0NFB2QTVSbThOVTlz?= =?utf-8?B?QjRCaXFvQTdjNFo4dHF4Tk9KSFBkclZ2V0JWb2RCR2xuUXNRNzRoZWQxV0M4?= =?utf-8?B?MkU2MXpVRnVoQzdkNWZUd0JCV2VoVkhFYnNHRjJMelp1cC9rdXhtV1RxOWdJ?= =?utf-8?B?eWhlNkRzQWgyUjR6eTZyQjQvcnJvbUE2WnhtbGNvOTFYeU8vTGwzeXJGNlVN?= =?utf-8?B?ZHVLemRJaHFDV0p0aU1hSm40YTM5alJXcXp1RE42VnBiMDhEY3VYMWJnYWRS?= =?utf-8?B?OXNOMlNHNnNHbTJQaWJYYkhFSXduSXcrRkV4ajlWR2pXSXpPZTl0bVlQOUJ6?= =?utf-8?B?bm8yWkxqdE9TRXZvZUFReWp0WFkraHVReXBacjdKNmJyM09wdEJOcVNSUEdv?= =?utf-8?B?ZUZnYTU3VzJsRDVRNHRUbUhFb0I3VHNiRnFDTXlvZ25XVVNSUHdyZElzZ2tW?= =?utf-8?B?Z0RIVFgvNnAzY3luVjF2bzN0VTFXb0lReitJbTcxMUlwaGplZytMK0J6bVRH?= =?utf-8?B?RFhwT1JOSjBaRmRtdkVpcDh1bGVoR1o4QlF5MFdEbnY3QitBTGFsSStQMVJW?= =?utf-8?B?OHVLT0RITm9LdVlubkJIbk1vdnpIc3Fxa0FQZVZWZWx0UXVRb3ByMWt0c1Jk?= =?utf-8?B?SG11dXRvL1NwNng5WDgyVjNPZDIzWnREL1pCb2lIaDRJS2dUTjFUUjZ5MnhC?= =?utf-8?B?cG02c1ZtdjZlZE9jNEJLTG1Wakh3ZFU0NHM4SytIa0swdTRzay9DOFJJRGVI?= =?utf-8?B?NWdIaEtBMUorMTdyYkZhM2QzczRLWHJtRWJ2akJMZ2FGQ0w0V0xXOUIzSzVp?= =?utf-8?B?MlNCOU94QjMzdTdSTlU1OEk5clMra0dQYVRKcG1YdFhrU2NpQ1R5OXNPTHI5?= =?utf-8?B?YUVEN3RzUXJKNHZIWGlrRTFjTlNtdThoVy9VSWVURHYwbVNXbFNxbkNrMXNl?= =?utf-8?B?SHFXaEQ1RExSa3Ntekt0T3d6dzNGTmxiREQ2Ty9sWHZzd0ZFaWp0dkFXUkdh?= =?utf-8?B?dEpKQzV4VkpGK1AxUEFLb2tLcDJ1M1luU3p0RG5OQ2RoNUN2VEVJSUpVVEdP?= =?utf-8?B?U3owTXFvRVlER0J2SFlQMDhMTUwwdlRpSEZKQjkzY3hHSmhQUkFVckN0bDda?= =?utf-8?B?azFBMFNySjJSSmFjaXFWcnI4V0dGOFU5QjNSLzZ0Wkk5MnNpZVRCMmg4UEhk?= =?utf-8?B?SUs2ak9ua1FJYnpIWnlIcmZhNmM2QlU1NVBhZ0kzem5YNk5EaUdRcFBoUnhh?= =?utf-8?B?cWw0bDI1UFZNT3phdlJUQU5VdTIreGg3S1EvZ2xWbGtkUnhIYmtZVmxORG41?= =?utf-8?B?ZTdOMXlBazYvR2VzUW9xRmZPc1FkbGRBK05GZUFIMStwSCtHNWxHbU1GMnU5?= =?utf-8?B?Y1RRWFhwMzZEeEVqNHc1Rk5pRkRyTDFoYWNabXdLNWhEaEtVRjhVcTI3bWJY?= =?utf-8?B?dVpxbUNlQ2FsR0RXRmdmT21vTWRYU2daODBOVWlTSGF6NmI0NmJlQjZTTU1z?= =?utf-8?B?WVovdXRMZTM2Y05yYUE3N2VFYldwdHJrL0N5ZndqVWhWTTc0UUtEMmppaitm?= =?utf-8?B?UWYzdz09?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RVFmbDBXVDVkQUNmV1F5Ry90LytHMEUrd1crNVBGaE9mRDRDNUZiWTdlWXZn?= =?utf-8?B?V3UvQk1jMkFQaHgwYlpWQTF5dU8ybjlCMC94L3VESDBvQXFqbG1hQnZIMFFO?= =?utf-8?B?WXhmZjA5QTZ5c2JEUDY1NnF6NmtMOGt5c2NCN0oyK2QzakNhSjkrbDkwbFZO?= =?utf-8?B?UWE5azlCeWh1djduRVZsenZOTU95N25LOEQ3SzJPZ213MXZUbFo3N3dPRVo0?= =?utf-8?B?aGwrWVhsRm8zRjdlU3NGelhGdms3RWkycDBvUVJxQ2M3clAvZGpWLzhlbW9C?= =?utf-8?B?NzdxOXh6bHlTbll1VHd5T1FZTHpQZnZsN2dGOWlJa0FkVFZtQnY2OHJrc3E1?= =?utf-8?B?RFJyNTNwckFIUDVFeUJPNVZFa2lIbmRXRWk5TmR3Sjk2MnRpbHJZYnpvYUVV?= =?utf-8?B?UDFHV3dab1VRUy9idEIzNmk0S2ZuZS8yRE9OUkZvclpDTERLd2JrUVNQRW03?= =?utf-8?B?NXpQUVBMRDNocE9ka283Sjl4YVdBZHBHdUZxK01yUUQvWDREdnVZdEwxV1Aw?= =?utf-8?B?N1pIZU9MR0NzVkpKUFVjZXQ2bUk5RnBxek1mMFJVZ1gwQ1BmZElIR295RGhO?= =?utf-8?B?S2cyblFVa0VKQzcybCtLTUFBZDlZZDB0dnphSko1S0Q2eEc0MXhCemFxV0lW?= =?utf-8?B?U2FZT2g2OXNnOFdSU2UyN1k3QlJPYnQ2eUtqR2lkODhCdE50VUZ5ejdnYkxj?= =?utf-8?B?bVJIM3pPUzhqT1JFUnl0aHgvK0ZJRTlkY2pIYTI3L1ZHZHFkbEdvelZLNGJZ?= =?utf-8?B?TnVyMTY2cytlS2ZnQnBqdEgyS2NhQmJiSVJ2V29UYUZrTGp3REZwMVdxK3NG?= =?utf-8?B?SnROcXc4UTczcXlHZEhzQUhzMUhNM2t6S3RIayt6Q2htSjlYUEt6MlNCRXM1?= =?utf-8?B?V3E5ZEFXU01GS3JqekJTTzNRMHhkUjJuaHMvVmxGa09EQm9OaWZPOWx2cXRl?= =?utf-8?B?NExyU1lyZllyVTBWUEVvclZvR21kUzlzdTRUeEl5UTBNMkhZWEFMRkdIZVV2?= =?utf-8?B?b0pHQ1VPcVlXZkxLMWtaSmQwcm1SeEZRVyt0aXJIODEraHZyNXVZQzJiRTNa?= =?utf-8?B?VGZVTzlTK2FyeHc2ZWFtVmhRVHdmd1p1RmN6cGREKzVEanZsVlN1Z29VQmlM?= =?utf-8?B?dnVNSmVlZnd5RGJ0bUNCcDNPQmNiWDNIKzRQSFRPbWkwamNUY2Zpb1piQWti?= =?utf-8?B?Vy9VSVFxSVdYQ2lGbnN0U0Fmdk5WMWJjT0x0TytkSVFOR1JMaTJZYVRmdlNh?= =?utf-8?B?MmFqKy9WN1I2MUEzdWErUzE3bmpKNEt2dm9yU2JKNVJaVDRjZVZITWZZRWkv?= =?utf-8?B?SDNtYjc3MVFUNE5FTmJMbzNmMjNKK0lnQjZUK2JaYlVoTzNLblFPTDJMZFBZ?= =?utf-8?B?MjQ4Qk1EMS81a2dQTk1qMEhNeUpqcjhJK3lNRHAwbVhPQVBScitUejQrczQv?= =?utf-8?B?NFdVRHNGUDFTNURrMDZVOWdkeHJSUmtwdG8wTXZEbmFjMWRwU2phSTE4WXdl?= =?utf-8?B?cWdMamFXaFh4di9lMFNRNGZKR0xJQUtUWVd4eW0yMnFtRUc1L3U2OW9BdEo5?= =?utf-8?B?eElmSlBPTUEydVhveHg4VmtxK1dUZzJ0RCtQWDF3ME5tTkpBYmhpUVZBbWNj?= =?utf-8?B?M0ZrOUkrQmNMUEtUK0hIakZaZ0VoamZ2cm1Ld2FLd25ETnJacld6bUdDVUJn?= =?utf-8?B?LytxQnMwaktsM0VDazFYTUo4OUVseERtdmw4TDhRN3FtdU5RcitHSlB3PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 206a55d8-a9c6-4e23-2c31-08dd4bfa2e31 X-MS-Exchange-CrossTenant-AuthSource: DU0P250MB0747.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2025 06:46:45.4449 (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: VI2P250MB1054 Subject: Re: [FFmpeg-devel] [PATCH] avformat/mov: Fix get_eia608_packet c608 caption reformatting 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 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: Pavel Koshevoy: > --- > libavformat/mov.c | 40 +++++++++++++++++++++++++++++++--------- > 1 file changed, 31 insertions(+), 9 deletions(-) > > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 85aef33b19..422e515fe8 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -10790,22 +10790,44 @@ static int mov_change_extradata(AVStream *st, AVPacket *pkt) > > static int get_eia608_packet(AVIOContext *pb, AVPacket *pkt, int size) > { > - int new_size, ret; > - > + /* We can't make assumptions about the structure of the payload, > + because it may include multiple cdat and cdt2 samples. */ > + int ret, out_size = 0; > if (size <= 8) > return AVERROR_INVALIDDATA; > - new_size = ((size - 8) / 2) * 3; > - ret = av_new_packet(pkt, new_size); > + > + /* Allocate 3 times the required buffer size to give us enough space > + to store the original c608 packet and (potentially 3/2 times larger) > + reformatted data, safely. */ > + ret = av_new_packet(pkt, size * 3); > if (ret < 0) > return ret; > > - avio_skip(pb, 8); > - for (int j = 0; j < new_size; j += 3) { > - pkt->data[j] = 0xFC; > - pkt->data[j+1] = avio_r8(pb); > - pkt->data[j+2] = avio_r8(pb); > + /* Load the original c608 payload into the last 3rd of the buffer. */ > + if (avio_read(pb, pkt->data + size * 2, size) != size) > + return AVERROR_EOF; > + > + /* parse and re-format the c608 payload in one pass */ > + for (uint8_t *out = pkt->data, *src = out + size * 2, *end = src + size; src + 8 <= end; ) { > + uint32_t atom_size = AV_RB32(src); > + uint8_t cc_field = > + memcmp(src + 4, "cdat", 4) == 0 ? 1 : > + memcmp(src + 4, "cdt2", 4) == 0 ? 2 : > + 0; > + > + if (cc_field != 0) { > + for (uint8_t *cc = src + 8, *cc_end = src + atom_size; cc < cc_end; cc += 2) { > + out[0] = (0x1F << 3) | (1 << 2) | (cc_field - 1); > + out[1] = cc[0]; > + out[2] = cc[1]; > + out_size += 3; > + out += 3; > + } > + } > + src += atom_size; > } > > + pkt->size = out_size; > return 0; > } > 1. You are trusting atom_size, although it may be insanely large. This may lead to segfaults. 2. 3 * size might overflow. 3. You overallocate a lot here. Wouldn't it be enough to allocate size + size / 2? You would then read into pkt->data + size / 2 and reformat the data from the start. 4. You need to shrink the packet to zero the padding. 5. You don't need to keep track of out_size; you can get it via out - pkt->data. - Andreas _______________________________________________ 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".