From patchwork Wed Mar 27 11:18:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: zhupengfei via ffmpeg-devel X-Patchwork-Id: 12473 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id D3E3D448C86 for ; Wed, 27 Mar 2019 13:20:42 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C0BA368A915; Wed, 27 Mar 2019 13:20:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 38D9A68A8F3 for ; Wed, 27 Mar 2019 13:20:36 +0200 (EET) Received: by mail-wm1-f68.google.com with SMTP id o25so15725437wmf.5 for ; Wed, 27 Mar 2019 04:20:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IPDo9sBdg1yh3ZRs2y1Od/cVWk416Sd/w6YKhOVNI1I=; b=gP2kN8uIuRw4u4IYyYCVkEqsJqEUe6SmvAVrWm3nM6pgTV30m504XTCoV4Ai6c45OE PKW7SHf1icBJg/VOMSn9SBKP+Lla4uJuvA29SVWWpr4A7qC0zEvFJjATGljSTxpyqPDw 55nO14oRJSRxzAEiK1Nzemebled+uw0dxwyRkH1RWO3/rFY55Wvai07uL1NeDUdx8wJc gi43XiZv/pOzi6bBdhSQj9jZOa4EkaN5YMdxBukIVCA52YldnfZaqTOSdJ21moDkevp9 yd3rG8c4putbJnb3xS4PLpKU6N9gQ/9BZM696/m74rPQexagcqLuF4BoVRlXy8Jnx3R+ mvSQ== X-Gm-Message-State: APjAAAVQdhgi+y2+CzOpRa+OZsWtp0cZbH3cW9f8JrDdni8nZotJiDdH GsSjdqdATL/+FNdDgECqARl5krLo5r4= X-Google-Smtp-Source: APXvYqz72WuVZAksQPdKCTP9TcPg7pR4E2BrDWIbj4mJy5GxsZIaKJdRiYTwmppMbe2WIITHbta9fQ== X-Received: by 2002:a1c:f312:: with SMTP id q18mr8104599wmq.96.1553685635611; Wed, 27 Mar 2019 04:20:35 -0700 (PDT) Received: from localhost.localdomain (ipbcc08c44.dynamic.kabel-deutschland.de. [188.192.140.68]) by smtp.googlemail.com with ESMTPSA id h10sm31745448wrs.27.2019.03.27.04.20.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Mar 2019 04:20:34 -0700 (PDT) To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Mar 2019 12:18:34 +0100 Message-Id: <20190327111852.3784-4-andreas.rheinhardt@googlemail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190327111852.3784-1-andreas.rheinhardt@googlemail.com> References: <20190308092604.3752-1-andreas.rheinhardt@googlemail.com> <20190327111852.3784-1-andreas.rheinhardt@googlemail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/21] avformat/matroskadec: Get rid of cluster size field assumption X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andreas Rheinhardt via ffmpeg-devel From: zhupengfei via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt , robux4@ycbcr.xyz Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The earlier code relied on the length of clusters always being coded on eight bytes (as is current Matroska muxer behaviour). But there is no need to rely on this and this commit changes it. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 7a96e53bdd..f3bc792728 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3694,14 +3694,16 @@ static int webm_clusters_start_with_keyframe(AVFormatContext *s) before_pos = avio_tell(s->pb); while (1) { int64_t cluster_id = 0, cluster_length = 0; + int read; AVPacket *pkt; avio_seek(s->pb, cluster_pos, SEEK_SET); // read cluster id and length - ebml_read_num(matroska, matroska->ctx->pb, 4, &cluster_id); - ebml_read_length(matroska, matroska->ctx->pb, &cluster_length); - if (cluster_id != 0xF43B675) { // done with all clusters + read = ebml_read_num(matroska, matroska->ctx->pb, 4, &cluster_id); + if (read < 0 || cluster_id != 0xF43B675) // done with all clusters + break; + read = ebml_read_length(matroska, matroska->ctx->pb, &cluster_length); + if (read < 0) break; - } avio_seek(s->pb, cluster_pos, SEEK_SET); matroska->current_id = 0; matroska_clear_queue(matroska); @@ -3710,7 +3712,8 @@ static int webm_clusters_start_with_keyframe(AVFormatContext *s) break; } pkt = &matroska->queue->pkt; - cluster_pos += cluster_length + 12; // 12 is the offset of the cluster id and length. + // 4 + read is the length of the cluster id and the cluster length field. + cluster_pos += 4 + read + cluster_length; if (!(pkt->flags & AV_PKT_FLAG_KEY)) { rv = 0; break;