From patchwork Sun Sep 22 16:38:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Tomas_H=C3=A4rdin?= X-Patchwork-Id: 51698 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d154:0:b0:48e:c0f8:d0de with SMTP id bt20csp2045165vqb; Sun, 22 Sep 2024 09:49:17 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXsLvO+bfTofTF6q8LZMRiF2BOyonn2ICnlrid+Dr+2XNOwtcf3RiunH7po+1+LzyJrQCswZciyX3VU0eohiq0N@gmail.com X-Google-Smtp-Source: AGHT+IGJOCyR5+hRkxRvYVU8thbdohDtWGNvMIkQI44FNYOLMiwnGKBuTSvhTPmPydBFxaP1l+MC X-Received: by 2002:a2e:a582:0:b0:2f5:2e2:eaf9 with SMTP id 38308e7fff4ca-2f7cb2cfea9mr50848951fa.4.1727023756968; Sun, 22 Sep 2024 09:49:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727023756; cv=none; d=google.com; s=arc-20240605; b=GHPoZGygluoU0EsIWIhUhhNEIreAIf5TuuW3XFRyrr42016cAvh8r54/LyT7vqB7uU 5cW9PU7kUAWy6Xc0BvjQHQ4zmNubQ8tkMWq+xpf3TE1m2StjDG0q5cRXfasdZ+cixzEW XPi0QFWzRYKI93VEN5SNkyrg9AbdJF8ICd6BIdrVdrpY21ZsBOcmh8Bx7LYKiUECCcQ3 HB1ZQ41xXZ91FtT8/zEj4SMbKcayr/kl8CJQUWt87PqKZKf9RA+rNjK15w1TtU5afg/9 eSqzu/G3yzQT+0p5wo/+YsIDIu1O2gqfWlxpqUswi88Es25Rc8rkTGXY2k4+KW/YRPYx /4ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:user-agent:references:in-reply-to:date:to:from :message-id:delivered-to; bh=5LUsPNzh+Pk/I3bCfs8JOiIAvsoSVPht7OYUcfaMg4Y=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=Xo4+HJosnkDA/BPRDSfNmjpCMIQFFsXrtd+4NtqnzVRP3VWizPjxxRKJogmE17gxHf CR8vY8zKRWIDUlq+PpGBvGHAEB26CJI1bHUqhCP7vNbu5WSkPE4CAqU5bs7Qc/V45PYk Wes3qPdaB+O2X8+0S7Hp36lHvTxXSSXcTNpc86ju6kd2076ajQVkSmn81904oiiRjnUg P01ME4xDIeyOiYIKENM1CXCivY5VcToIvR+5N1bSCchbTN5QVGDxNoiNVMQU/NmxZW7i UjhY43hQ6xywCpUoTGp4p0Q3x5meXnpm8aitRXMJNk1nQFh069pZ448FbUi9LkgzsVyE a4Rg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2f79d2db320si50565531fa.179.2024.09.22.09.49.16; Sun, 22 Sep 2024 09:49:16 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2B6D668DB1B; Sun, 22 Sep 2024 19:38:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from glom.nmugroup.com (glom.nmugroup.com [193.183.80.6]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DE99C68DADA for ; Sun, 22 Sep 2024 19:38:31 +0300 (EEST) Received: from localhost (localhost [127.0.0.1]) by glom.nmugroup.com (Postfix) with ESMTP id 8C7B65422B58 for ; Sun, 22 Sep 2024 18:38:31 +0200 (CEST) Received: from debian.lan (unknown [IPv6:2a00:66c0:a::72c]) (Authenticated sender: git01) by glom.nmugroup.com (Postfix) with ESMTPSA id 4752F5422937 for ; Sun, 22 Sep 2024 18:38:30 +0200 (CEST) Message-ID: <3e00db027d443e56ca679974d6a4f48635884487.camel@haerdin.se> From: Tomas =?iso-8859-1?q?H=E4rdin?= To: FFmpeg development discussions and patches Date: Sun, 22 Sep 2024 18:38:30 +0200 In-Reply-To: <1de0719456ef2f015b83d214d73334853af26612.camel@haerdin.se> References: <1de0719456ef2f015b83d214d73334853af26612.camel@haerdin.se> User-Agent: Evolution 3.46.4-2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] lavf/mxfdec: Remove a call to avio_tell() in klv_read_packet() 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uO5rrey3KACh From e036dec9bdd621db809bb23822b7d22f66ab43fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Sun, 15 Sep 2024 22:46:55 +0200 Subject: [PATCH 5/5] lavf/mxfdec: Remove a call to avio_tell() in klv_read_packet() --- libavformat/mxfdec.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 3dd7c3bfdc..2ebfe82b7e 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -431,7 +431,7 @@ static void mxf_free_metadataset(MXFMetadataSet **ctx, enum MXFMetadataSetType t av_freep(ctx); } -static int64_t klv_decode_ber_length(AVIOContext *pb) +static int64_t klv_decode_ber_length(AVIOContext *pb, int *llen) { uint64_t size = avio_r8(pb); if (size & 0x80) { /* long form */ @@ -439,9 +439,13 @@ static int64_t klv_decode_ber_length(AVIOContext *pb) /* SMPTE 379M 5.3.4 guarantee that bytes_num must not exceed 8 bytes */ if (bytes_num > 8) return AVERROR_INVALIDDATA; + if (llen) + *llen = bytes_num + 1; size = 0; while (bytes_num--) size = size << 8 | avio_r8(pb); + } else if (llen) { + *llen = 1; } if (size > INT64_MAX) return AVERROR_INVALIDDATA; @@ -480,6 +484,8 @@ static int mxf_read_sync_klv(AVIOContext *pb) static int klv_read_packet(MXFContext *mxf, KLVPacket *klv, AVIOContext *pb) { int64_t length, pos; + int llen; + if (!mxf_read_sync_klv(pb)) return AVERROR_INVALIDDATA; klv->offset = avio_tell(pb) - 4; @@ -488,11 +494,11 @@ static int klv_read_packet(MXFContext *mxf, KLVPacket *klv, AVIOContext *pb) memcpy(klv->key, mxf_klv_key, 4); avio_read(pb, klv->key + 4, 12); - length = klv_decode_ber_length(pb); + length = klv_decode_ber_length(pb, &llen); if (length < 0) return length; klv->length = length; - pos = avio_tell(pb); + pos = klv->offset + 16 + llen; if (pos > INT64_MAX - length) return AVERROR_INVALIDDATA; klv->next_klv = pos + length; @@ -663,15 +669,15 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv av_aes_init(mxf->aesc, s->key, 128, 1); } // crypto context - size = klv_decode_ber_length(pb); + size = klv_decode_ber_length(pb, NULL); if (size < 0) return size; avio_skip(pb, size); // plaintext offset - klv_decode_ber_length(pb); + klv_decode_ber_length(pb ,NULL); plaintext_size = avio_rb64(pb); // source klv key - klv_decode_ber_length(pb); + klv_decode_ber_length(pb, NULL); avio_read(pb, klv->key, 16); if (!IS_KLV_KEY(klv, mxf_essence_element_key)) return AVERROR_INVALIDDATA; @@ -681,12 +687,12 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv if (index < 0) return AVERROR_INVALIDDATA; // source size - klv_decode_ber_length(pb); + klv_decode_ber_length(pb, NULL); orig_size = avio_rb64(pb); if (orig_size < plaintext_size) return AVERROR_INVALIDDATA; // enc. code - size = klv_decode_ber_length(pb); + size = klv_decode_ber_length(pb, NULL); if (size < 32 || size - 32 < orig_size || (int)orig_size != orig_size) return AVERROR_INVALIDDATA; avio_read(pb, ivec, 16); -- 2.39.2