From patchwork Fri Mar 8 09:25:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 12244 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 66611449027 for ; Fri, 8 Mar 2019 11:26:49 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4F5EE68A774; Fri, 8 Mar 2019 11:26:49 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 70C9268A769 for ; Fri, 8 Mar 2019 11:26:48 +0200 (EET) Received: by mail-wr1-f67.google.com with SMTP id o7so465189wrp.12 for ; Fri, 08 Mar 2019 01:26:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8ir10WPGdr3kbA0if4pOmRk9oMkihYFF2s6iTJ/IYFE=; b=KY8BmNoEEeLek8rSX6IGIE4Ug8977u9KUf/mLXQ17EQtJyjdp7MReSox1P0KLHTlq+ 0X4QeYGOoM4lqZD9RO7E+lzHMfUKUX0hzRZraeqKZpR/Ae54oig7UxXqkQzJQ3dJwxCj 5P1x/5P0qt+lecCG2o2K+RTuHTGJxBqC74OLcrKbK7Zm1Nd4bVY1/JCPFvExmW64nDhz UkkDiqYM/BorNzUFUmZhq4L7/CZr4gN3CW4iydB6JMbEJyoxalgbJNQvXHXjfRMG7Cth lL9TSi7UzWy3Mj5I2QI6wVaiT/ZiNyCu6mUfrg94/OKZchE2Y1Ve/Q9VT8A3BrCpHRDf 5xxA== 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=8ir10WPGdr3kbA0if4pOmRk9oMkihYFF2s6iTJ/IYFE=; b=d7ZkQnITNBMdcXGWAqA0w/SOchdzF5SnW5uTGn/Z9TPfGfVn2pyLB7kR74dyvTsZmY jeLz3Qo9GrJU7m8q1Rwih7sywGBeq4jUMhinTXIdOfyhsmNkimhbCZ9Nro8U25W53Rnr w21vEMD5Kuj3eogGTdKonNB4HHrGzNsf7PF75qLJuux+n+RyoXhAmyt4OgWErbZd3uau wx/jV2SB68PduWHxc/WwyQP9eSjdYUNvbbep4W4R0CZFZpLpFrmsQz9GIStpIivF9Im2 nMk3ImnZ1K1pp73+BmEVGXmDVP9xdz1YNgto/F9VcCF8/9pEBqcKnmrAi4l1fXh2xQef vvhw== X-Gm-Message-State: APjAAAWhCsAabifLh6yHFEqvNyTWFl+/N3EAEgELA7Bw/fzD5i8bHKLh eumO6m4IXP/aMrbUz0e/dQnOwNWHKR8= X-Google-Smtp-Source: APXvYqzqQLmFCQUSh738mvFELG1awBVbVyQM4NFTbXAyqCrFXJPBlE+IJTn6L65zP3lj0zPW9uFeeA== X-Received: by 2002:adf:e8ca:: with SMTP id k10mr10180392wrn.191.1552037207811; Fri, 08 Mar 2019 01:26:47 -0800 (PST) Received: from localhost.localdomain (ipbcc08c44.dynamic.kabel-deutschland.de. [188.192.140.68]) by smtp.googlemail.com with ESMTPSA id v20sm12179825wmj.2.2019.03.08.01.26.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Mar 2019 01:26:47 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 8 Mar 2019 10:25:57 +0100 Message-Id: <20190308092604.3752-4-andreas.rheinhardt@googlemail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190308092604.3752-1-andreas.rheinhardt@googlemail.com> References: <20190308092604.3752-1-andreas.rheinhardt@googlemail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/10] avformat/matroskadec: Don't make unnecessary assumptions 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: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" regarding the length of a cluster's size field. 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 8a14764d1a..88e80b2fda 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3695,14 +3695,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); @@ -3711,7 +3713,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;