From patchwork Thu Apr 23 03:07:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19180 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 4BE0E44B4F3 for ; Thu, 23 Apr 2020 06:07:57 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2373D68BDEA; Thu, 23 Apr 2020 06:07:57 +0300 (EEST) 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 71DE568BD9F for ; Thu, 23 Apr 2020 06:07:51 +0300 (EEST) Received: by mail-wr1-f67.google.com with SMTP id g13so5014725wrb.8 for ; Wed, 22 Apr 2020 20:07:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=DVqKBGqVmXrSkCyskDrsdxiMn5X+4AWgDBgQnl53VwQ=; b=KYLDOwDPmr7XZ9mVsuAkbUtXcJDocMFuKotDyUzWs/4mKlWQS293fxm4GjsrReLl1A Ci++gmNWf2f04mu3GlQ7TmMa2rIb268w+i+95VYR8xneSCLDXWAPo5M9Pp3c5rQh6p8K +78NvIyHEWaCTsulpDYIbwTpmmHqqNFtBv1v6tfP0Q+E1Kn1kv7LqYGPOzbaAPJXP1hB 8u+w7qtHy1CtaS9GRilwsSzGe1W8LmHwUeq+2I/oKnfJR2MfS3A+eaQVbLE0vMdUPllH E90pJkw/IrjW9Cq3cuAc0pMHx1/V9ibVtDowb10I4SjvADJR/N4ssqU/kxkSyvBGDScB CvTQ== 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:mime-version :content-transfer-encoding; bh=DVqKBGqVmXrSkCyskDrsdxiMn5X+4AWgDBgQnl53VwQ=; b=t3kuEd98e6BHE9sFFSCK0OA7s3NwqprrJlkKLyB6UYhwzsEfO3d4plU4b3+8blGAQZ YS/MrKOIG41E/RONSRpnIDilvxaG+HFco60PMXPTUcEP8jFqY3DMLtksDEnlOgCBQAUH qHWrI3qBRRXJ7bu0SB1itFjy8X/Jolsz89z8WtqH8roKvzgfCjPlAZfU6Ig9Wn1wQdED AMjf1s55z04vsNRLbXQBPcIgM7ESZitB/iwF64gYkN80WWi0ZYOj6PqPvmH+R+TKKCDM /JgoUeKfEwVKIg5CawrUz1fyvKUt92IGqNkbWoY4s2HlnVbRwkrBocxodiSNi7TY3ZDw KbTg== X-Gm-Message-State: AGi0PuYvmen1ZDC703rJsJzRxYI62mKnMJMOJLh9lSOTZalC6DDNgvBN Ppz/r42RD8PtURJG4RkjMyEYR5qd X-Google-Smtp-Source: APiQypKIKGeb0q6r0imaTSJA4EXHkOYHly9rGGgc3BYJwXW9mgsBqr5YRr5AFN2OzlHRqol8837KMw== X-Received: by 2002:adf:f342:: with SMTP id e2mr2191216wrp.146.1587611270598; Wed, 22 Apr 2020 20:07:50 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.07.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:07:49 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:31 +0200 Message-Id: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/11] avformat/matroskadec: Reject sipr flavor > 3 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" Only flavors 0..3 seem to exist. E.g. rmdec.c treats any flavor > 3 as invalid data. Furthermore, we do not know how big the packets to create ought to be given that for sipr these values are not read from the bitstream, but from a table. Furthermore, flavor is only used for sipr, so only check it for sipr; rmdec.c does the same. (The old check for flavor being < 0 was always wrong given that flavor is an int that is read via avio_rb16(), so it has been removed completely.) Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 8e1326abf6..8c65e98e77 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2606,28 +2606,30 @@ static int matroska_parse_tracks(AVFormatContext *s) track->audio.sub_packet_h = avio_rb16(&b); track->audio.frame_size = avio_rb16(&b); track->audio.sub_packet_size = avio_rb16(&b); - if (flavor < 0 || - track->audio.coded_framesize <= 0 || + if (track->audio.coded_framesize <= 0 || track->audio.sub_packet_h <= 0 || track->audio.frame_size <= 0 || track->audio.sub_packet_size <= 0 && codec_id != AV_CODEC_ID_SIPR) return AVERROR_INVALIDDATA; - track->audio.buf = av_malloc_array(track->audio.sub_packet_h, - track->audio.frame_size); - if (!track->audio.buf) - return AVERROR(ENOMEM); + if (codec_id == AV_CODEC_ID_RA_288) { st->codecpar->block_align = track->audio.coded_framesize; track->codec_priv.size = 0; } else { - if (codec_id == AV_CODEC_ID_SIPR && flavor < 4) { + if (codec_id == AV_CODEC_ID_SIPR) { static const int sipr_bit_rate[4] = { 6504, 8496, 5000, 16000 }; + if (flavor > 3) + return AVERROR_INVALIDDATA; track->audio.sub_packet_size = ff_sipr_subpk_size[flavor]; st->codecpar->bit_rate = sipr_bit_rate[flavor]; } st->codecpar->block_align = track->audio.sub_packet_size; extradata_offset = 78; } + track->audio.buf = av_malloc_array(track->audio.sub_packet_h, + track->audio.frame_size); + if (!track->audio.buf) + return AVERROR(ENOMEM); } else if (codec_id == AV_CODEC_ID_FLAC && track->codec_priv.size) { ret = matroska_parse_flac(s, track, &extradata_offset); if (ret < 0) From patchwork Thu Apr 23 03:07:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19181 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 3EF6F44BA43 for ; Thu, 23 Apr 2020 06:08:15 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 248B968BDF0; Thu, 23 Apr 2020 06:08:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C410A68BDE8 for ; Thu, 23 Apr 2020 06:08:08 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id j2so5016389wrs.9 for ; Wed, 22 Apr 2020 20:08:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SWY2AfRjeYV2U6lmcQOoHCCkkSPRGsbQdRiD0yOzlMM=; b=tsArQ3eWT7HT5rsUlKX+IKTZ+voxXVh5tg95dZzvXYI5e7tWMSd1RonuQAwhEqu0dG nwjEHc7Tgv8c/ywuAee/txRrkp7F4RgwprqnqFcE4FlvJZHYgDXKRoY17NClX4GqzDr5 qK/ZfHh5BURT8R5t9VU/vt5SeeB3aykIDMK6soumWg1GD8s2lXvwCU2HUgR9bLbNGCCS nxhPQ+JvGrP1/7Otgum2uRdT7LX/6WYAO3qV1yhlzTgniYLdgkvVTvhxCXrVUSbLElAa PKaRpw7DKm/3OnWoGMoCqgGIkERNRJv1cblIDmUmT1UUiVYv4pZPFp6ww0mRSnIoHgYB 62kw== 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=SWY2AfRjeYV2U6lmcQOoHCCkkSPRGsbQdRiD0yOzlMM=; b=l3O4xWQMYhYvk2N/nMMz3YwJjtssGiYCT1B525BhzxF+m3fOk0doptolh1U7Ci+RSz cwFPfW/eftZtTjahB3+ZMgJIHpSBmIzJ52EG5Zs1KPVBVTMJzOidVVS4Ltqt1whqrkCM 5+w24Ozmc5dwoTG5G2ljEfRZRkfv75AGFcRoXYAICSx2vLVMQLznTS+1qb6U/69fo1pJ aALylWeaq7IVrHVHrsU2F8fxDfCF6cAOaLgXeD6YYZQIxYh8y1j0e3SqQG1WbVOPWrU9 KPKtQzZVkN7jwXlt5bhakjA9muvpnW9AJQn00xEaa/RuAa6f84B7UpdKtp7mDswfmpWe 5SMQ== X-Gm-Message-State: AGi0Puaid8j2VfycQByEKZh74GB6XoNJVigBMooItF49glzTDSXqIVmi TKHGezfEjf18RrHMqLdJ9o/X0GEm X-Google-Smtp-Source: APiQypLgbTELuY6XvR/xN7pa34yC35Z/AM64+yxuGhYPP8NRn3JSSv2Ln/6ILqFmMt1uT+B7ScY4Kw== X-Received: by 2002:adf:f444:: with SMTP id f4mr2207324wrp.376.1587611287948; Wed, 22 Apr 2020 20:08:07 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:07 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:32 +0200 Message-Id: <20200423030741.12158-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/11] avformat/matroskadec: Simplify check for RealAudio 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" They need a special parsing mode and in order to find out whether this mode is in use, several checks have to be performed. They can all be combined into one: If the buffer that is only used to assemble their packets has been allocated, use the RealAudio parsing mode. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 8c65e98e77..668323ba08 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3617,11 +3617,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf for (n = 0; n < laces; n++) { int64_t lace_duration = block_duration*(n+1) / laces - block_duration*n / laces; - if ((st->codecpar->codec_id == AV_CODEC_ID_RA_288 || - st->codecpar->codec_id == AV_CODEC_ID_COOK || - st->codecpar->codec_id == AV_CODEC_ID_SIPR || - st->codecpar->codec_id == AV_CODEC_ID_ATRAC3) && - st->codecpar->block_align && track->audio.sub_packet_size) { + if (track->audio.buf) { res = matroska_parse_rm_audio(matroska, track, st, data, lace_size[n], timecode, pos); From patchwork Thu Apr 23 03:07:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19182 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 22BC544BA43 for ; Thu, 23 Apr 2020 06:08:19 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 088FA68BE0A; Thu, 23 Apr 2020 06:08:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D412E68BDDF for ; Thu, 23 Apr 2020 06:08:09 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id k1so5044806wrx.4 for ; Wed, 22 Apr 2020 20:08:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9c8Mlww3ObQa8gHC9PHUm35lCHSnNqMxSJPAvxWGrks=; b=ZPok0dvzkjNOmWNQlIYSwIUaaZhQnTB2FxFEAoCmvOh0crLLSMT5gS8lFCZJHfTTjR P+bXiR6jjYfI3qD3HPcQn8+dLNSeYGqjKqiNxxDgWEJDM5qz4a5Gwe6aiyBqkKK582ka 0fbo9oV+nLu1BDWTQAjQTCXvuYdvgf3Q1wT0mQj9XtM4fBsdCj13n25TXFOgxcvFSr5a qsKsQMBxPrLQsfwBVQFR6AhevK92d7UV3y1Ibe75PEWu1r9qf6GLQag/EerwdXEXGqZH i++RvBVeisA4k/IAxcXXWfuUAsRBk3ENHxHzhH/KLMJ014Xc9uEjqKW4I1heb2dYafg/ ePXA== 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=9c8Mlww3ObQa8gHC9PHUm35lCHSnNqMxSJPAvxWGrks=; b=nKSVDQT8JTtZalPqTtXMxj54yiL4KcnluXoe/AXXjTDB9rh3jZ6M7SiZKBj+W0s94j 1n/kcJ2ZC0OAQeZaoVQ8F/jGrRa4p2LyNTHiuaNQPPm2gn/yZWKrnyESplabI6nBXAax b8YDn5HFaRurzI9rBGFsTqnSXyRDAQQ6wd2EK0O4JGyb31ptAkaVQ7diYsd8HNfMtsa2 1ywLKkN+7wK7xLGWmToPTQ2tJrYQU6z4txpzXa3AWaufiRkw7gh0x2FciluISZGFEXPH Xa8Ih/RqGLQiAPBWg1+FjOX2pag02mYIEjSAUvZ9xIPxLYbGDSVD0GcFbtYbvGTX+2YJ WXyw== X-Gm-Message-State: AGi0PuaC3tbOYMtfGM9YbHNzwnAwzlWIWkCh+JRcoeRBDTwXoGI3sudw cGG9KU5gw6RRfr6prtyR3N+ZykJE X-Google-Smtp-Source: APiQypJHL5AkH7gHyWjMbsY1CzoMcZo/8+ggI0mAcbpvhgrQ9h+/f8aNn7V+wTYHj0LRmJf2Tektlg== X-Received: by 2002:adf:ef8b:: with SMTP id d11mr2459707wro.340.1587611289035; Wed, 22 Apr 2020 20:08:09 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:08 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:33 +0200 Message-Id: <20200423030741.12158-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/11] avformat/matroskadec: Fix demuxing RealAudio 28.8 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" RealAudio 28.8 does not need or use sub_packet_size for its demuxing and this field is therefore commonly set to zero. But since 18ca491b the Real Audio specific demuxing is no longer applied if sub_packet_size is zero because the codepath for cook and ATRAC3 divide by it; this made these files undecodable. Furthermore, since 569d18aa (merged in 2c8d876d) sub_packet_size being zero is used as an indicator for invalid data, so that a file containing such a track was completely skipped. This commit fixes this by not checking sub_packet_size for RealAudio 28.8 at all. Signed-off-by: Andreas Rheinhardt --- Actually, the Matroska demuxer presumes that RealAudio 28.8 is always INT4-interleaved. This commit fixes demuxing for such tracks. But apparently it can also be INT0-interleaved (our RealMedia muxer writes packets with this method). Btw: Remuxing cook and ATRAC3 with our RealMedia muxer leads to broken files that not even our demuxer can read (sub_packet_size is not set correctly). libavformat/matroskadec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 668323ba08..844f96cd52 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2608,8 +2608,7 @@ static int matroska_parse_tracks(AVFormatContext *s) track->audio.sub_packet_size = avio_rb16(&b); if (track->audio.coded_framesize <= 0 || track->audio.sub_packet_h <= 0 || - track->audio.frame_size <= 0 || - track->audio.sub_packet_size <= 0 && codec_id != AV_CODEC_ID_SIPR) + track->audio.frame_size <= 0) return AVERROR_INVALIDDATA; if (codec_id == AV_CODEC_ID_RA_288) { @@ -2622,7 +2621,8 @@ static int matroska_parse_tracks(AVFormatContext *s) return AVERROR_INVALIDDATA; track->audio.sub_packet_size = ff_sipr_subpk_size[flavor]; st->codecpar->bit_rate = sipr_bit_rate[flavor]; - } + } else if (track->audio.sub_packet_size <= 0) + return AVERROR_INVALIDDATA; st->codecpar->block_align = track->audio.sub_packet_size; extradata_offset = 78; } From patchwork Thu Apr 23 03:07:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19183 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 3371844BA43 for ; Thu, 23 Apr 2020 06:08:20 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1571668BE10; Thu, 23 Apr 2020 06:08:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D743F68BDFD for ; Thu, 23 Apr 2020 06:08:10 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id j2so5016449wrs.9 for ; Wed, 22 Apr 2020 20:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qHqJGwxJeH7PC2Bysww2cFij6rAeumpAnE3PmhJKw38=; b=plxXGghEYspcUetLhY3ZwmmgFdeJnxgAi8uyAs4epF7BeYBNAEVjuMFldZLqS396Jk PmF8OMDzRb7jscUAPXnTxj9JW51p4A1zzAKkVkMXHsYf2ND2MaEu0/Z6xMPGHgpQaY4x O4fJkEp6E9Q3wcSQMYu+juGVK+PC18/0LCILGiOfbFmgA/kqNCMPLuwYD/CXT9LWvGAV e6MFrWdP6lgiB5oLz/inEjsbqg4kOJQgb8dDwZj36dWqOca7VFCehpQdpvFjgiwbjsmG UzSOFLnAsN6dYPZkTLbr9If+VBZrNJU5/dh/fWb4xZJS9lLH1eOY5t1Ty9rjkHnj3Lj0 tavQ== 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=qHqJGwxJeH7PC2Bysww2cFij6rAeumpAnE3PmhJKw38=; b=e3ZcmZ4MYP4CJ4FjanKx6jhKIo2BhKTlcQCWzpDyykItnAAKZVNa7DAoSZgG1BGcK9 dg+JHldkfUr2ybUj+v8JGgrjKi0j+TzK0vHekXQh+Ox+4S65IxQwXycxeCYwiSyUGm1Q qZW+fGrZxOjfhc0ruIO8OhSVnG0oEF45eMR5lbDXXLw2+cKQafOlv7hW2BVt9tbr+V0Z fSglXyuks3xD/4qPvuAItv6CCmxNCW3r1dmu+Ovk+MziLh+OtYezMB4SW1ojiSo4eMFo ramclT82H2KrM89G27uRJNCgH/XdhL696tbKS12Sp0uCTP1/NUA1yD0p3TILpkIYWtIv b/XA== X-Gm-Message-State: AGi0PuZgLrk2vkyBdK6AfC8OKLFZ4R02F5v035aspOY8GfpeZKqhMz68 zhC6YRuVEujSm8is8Kpt1l7quI56 X-Google-Smtp-Source: APiQypLl+x4Hr+GaYJr9+69XjBlfFv272LMu6dyK/qvMwGoM9InTfXxCh+cip3ZyVkfAJ2dj7q2j8g== X-Received: by 2002:a05:6000:12c7:: with SMTP id l7mr2343531wrx.239.1587611289993; Wed, 22 Apr 2020 20:08:09 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:09 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:34 +0200 Message-Id: <20200423030741.12158-4-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/11] avformat/matroskadec: Fix buffer overflow when demuxing RealAudio 28.8 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" RealAudio 28.8 (like other RealAudio codecs) uses a special demuxing mode in which the data of the existing Matroska Blocks is not simply forwarded as-is. Instead data from several Blocks is recombined together to output several packets. The parameters governing this process are parsed from the CodecPrivate: Coded framesize (cfs), frame size (w) and sub_packet_h (h). During demuxing, h/2 pieces of data of size cfs each are read from every Matroska (Simple)Block and put at offset m * 2 * w + n * cfs of a buffer of size h * w, where m ranges from 0 to h/2 - 1 for each Block while n is initially zero and incremented after a Block has been parsed until it is h, at which poin the assembled packets are output and n reset. The highest offset is given by (h/2 - 1) * 2 * w + (h - 1) * cfs + cfs while the destination buffer's size is given by h * w. For even h, this leads to a buffer overflow (and potential segfault) if h * cfs > 2 * w; for odd h, the condition is h * cfs > 3 * w. This commit adds a check to rule this out. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 844f96cd52..951695b5b5 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2612,6 +2612,9 @@ static int matroska_parse_tracks(AVFormatContext *s) return AVERROR_INVALIDDATA; if (codec_id == AV_CODEC_ID_RA_288) { + if ((int64_t)track->audio.sub_packet_h * track->audio.coded_framesize + > (2 + (track->audio.sub_packet_h & 1)) * track->audio.frame_size) + return AVERROR_INVALIDDATA; st->codecpar->block_align = track->audio.coded_framesize; track->codec_priv.size = 0; } else { From patchwork Thu Apr 23 03:07:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19184 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 4A1C444BA43 for ; Thu, 23 Apr 2020 06:08:21 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 35C7B68BE17; Thu, 23 Apr 2020 06:08:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C28868BDFD for ; Thu, 23 Apr 2020 06:08:12 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id t14so5003007wrw.12 for ; Wed, 22 Apr 2020 20:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tLUpHuFvHsBJCP1JtLQPgMNLlJWglASPiq/+4O+yKZ8=; b=JmuQ3DbFeWMnYwkngZehBouot9W0qKAMQRsOwbd0PMMOvDufnEN5yQdWPFq9GXBqhe c+FD8AnSPPG4gwe48yxAJQ/h06gUogU6JnxTxUf9sBjRCOQYBcB15WZpctcfZKmxkTua gMarkspTKX1OYqcocJWH57AqeyupgcMAmetPWvLkdGEIYHg12Zj2cfduGJBvg3M3LXge edFrLSh7F/+dBOlk2t2VQ9eMsv27Qq7Um8rrXmGHuKA8hl/hVf0PEe3InB0cS6es4o9P 1/Ho4Y8vZIiaZrqp1kSVnzqvyPD79eb1y78iqnT1PJD2U3psQ/+9fcy5mjm/p+VGVC8y s2DA== 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=tLUpHuFvHsBJCP1JtLQPgMNLlJWglASPiq/+4O+yKZ8=; b=pSycl5AIl3dMHUImvOL9IleSklKjnebfCGsqyhfiehQRoztRkO8bY16VtqjSlzXxiy C0o0VWaF3Q5ErYNt/bCzuLhZ6wZ94OOxl9XqfRVmYKeoAXa5H5524dUCNK2A35U5BIpN IscbOJl2V+JWUneH1CYtStQACgEej+lmOBNwmF2X2vre//GDBF8J5QuCVAtA3eooRbvK 5PkXD26IT3/ATWFesDwSfT1JkDgS/t0/DlVAz4mhQuyNVNvSadLdx0k8B31SmvKXriQ4 p2cKu49LmOF994dsrXwHXHmX35EPhCFnCaVz39AeDKSHjs0VHy/Xw6whyRR9DxBPtScs AUSA== X-Gm-Message-State: AGi0PuZrAfljq1uUce39dvNeGbw7MESPD3xSkCQof/+u3OZYuoxrdnYD AUAH2e0zIiGXZx1A3l/gV4WzTyrj X-Google-Smtp-Source: APiQypK0VuheXXygspsyCleaZLzMJmm3K5pgb3wHkkPa6sa+Mlk/BVI8phmqaJ2rke9hMEiDIwahXA== X-Received: by 2002:adf:b1c9:: with SMTP id r9mr2441552wra.271.1587611291119; Wed, 22 Apr 2020 20:08:11 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:10 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:35 +0200 Message-Id: <20200423030741.12158-5-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/11] avformat/matroskadec: Don't output uninitialized data for RealAudio 28.8 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" The Matroska demuxer splits every sequence of h Matroska Blocks into h * w / cfs packets of size cfs; here h (sub_packet_h), w (frame_size) and cfs (coded_framesize) are parameters from the track's CodecPrivate. It does this by splitting the Block's data in h/2 pieces of size cfs each and putting them into a buffer at offset m * 2 * w + n * cfs where m (range 0..(h/2 - 1)) indicates the index of the current piece in the current Block and n (range 0..(h - 1)) is the index of the current Block in the current sequence of Blocks. The data in this buffer is then used for the output packets. The problem is that there is currently no check to actually guarantee that no uninitialized data will be output. One instance where this is trivially so is if h == 1; another is if cfs * h is so small that the input pieces do not cover everything that is output. In order to preclude this, rmdec.c checks for h * cfs == 2 * w and h >= 2. The former requirement certainly makes much sense, as it means that for every given m the input pieces (corresponding to the h different values of n) form a nonoverlapping partition of the two adjacent frames of size w corresponding to m. But precluding h == 1 is not enough, other odd values can cause problems, too. That is because the assumption behind the code is that h frames of size w contain data to be output, although the real number is h/2 * 2. E.g. for h = 3, cfs = 2 and w = 3 the current code would output four (== h * w / cfs) packets. although only data for three (== h/2 * h) packets has been read. (Notice that if h * cfs == 2 * w, h being even is equivalent to cfs dividing w; the latter condition also seems very reasonable: It means that the subframes are a partition of the frames.) Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 951695b5b5..1dc0b77962 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2612,8 +2612,8 @@ static int matroska_parse_tracks(AVFormatContext *s) return AVERROR_INVALIDDATA; if (codec_id == AV_CODEC_ID_RA_288) { - if ((int64_t)track->audio.sub_packet_h * track->audio.coded_framesize - > (2 + (track->audio.sub_packet_h & 1)) * track->audio.frame_size) + if (track->audio.sub_packet_h & 1 || 2 * track->audio.frame_size + != (int64_t)track->audio.sub_packet_h * track->audio.coded_framesize) return AVERROR_INVALIDDATA; st->codecpar->block_align = track->audio.coded_framesize; track->codec_priv.size = 0; From patchwork Thu Apr 23 03:07:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19185 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 6698544BA43 for ; Thu, 23 Apr 2020 06:08:23 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5353E68BE2B; Thu, 23 Apr 2020 06:08:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2AB2B68BDFE for ; Thu, 23 Apr 2020 06:08:13 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id j1so5039333wrt.1 for ; Wed, 22 Apr 2020 20:08:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gu9TNj0z+yFO4jtBws+B/bRFfjPqdSaEnqU1ec2FUPQ=; b=XxfWlbwx2CIaUEEa+qdBe++48N5b23KQ0gjgXubwP6puT/niV6ZwFUJCL7Kkl8j1Wi 1vSTeZLRDFGB+0LBMfbPox8sFUucxCzVRIGsZfCxpYd8Ucmzr5Q9NnsTnUWgGiL+6mSS kQ3hPRKAuHKO9OrLsemSe4dh5oHZDyrDbRMG56pQaXevmnbgpCEFt1u55JiI9XntCwY3 8GAPKzgIvzYIuSgCZsmmrQE5p4aUCxN06CgteyXvbrYmAgoM1A8+TaSUL9ceFKmcSVDb 3McOPHKSG4DN+0Lszt0IHXJPOnz4nklsVVvU+CTiJBEhGIHmGYoEYcOAGEoYWhT+V+U4 wBZw== 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=gu9TNj0z+yFO4jtBws+B/bRFfjPqdSaEnqU1ec2FUPQ=; b=mJRBTBV9HJUiGqifQ1AVN+ytEe1NydXKYGLNgz9ujuaAYH4HeP16qcbbFTEa46+3WC 6VtoFLyWjmaKUCwUS/PU9j0Kh9VLNuUdb4Mr304SviWgB09AHmp4RUclDDXYr9gddKBd esUOEc2WjNaTqy2TMm6xr9FVuAiXF8eokgrwuC49M3uHGfft9f7FdfYHHtimUT9ada+3 7v7KIQrOakYeTUsh8skemereOA9je2TGLGHIDSQQXJ9k4/3SvKUCRbbzFwsiC48Q+1vB TGXtF/8rKH6H5Vu342wcfIBaYCZpVsCh2ZhS5n5i3pRWSMDx83KtkgrhqfZkz1Yu93jF qmzw== X-Gm-Message-State: AGi0PuaxwfwRDKQgDv26c6yVAFRCyI5WApHdl5I/1AYyrmbXX/YXwds5 +O6DgHnNAipOoUgBK8QMi9Kmky9d X-Google-Smtp-Source: APiQypKPI8zZ+ZdqKN3ACNurIStPrhrLYHM+BXxOneagQ5+7N5nH4yYgqSl3bWWeIP1vqKkmgObAzg== X-Received: by 2002:a5d:6302:: with SMTP id i2mr2360208wru.80.1587611292437; Wed, 22 Apr 2020 20:08:12 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:11 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:36 +0200 Message-Id: <20200423030741.12158-6-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/11] avformat/matroskadec: Simplify checks for cook and ATRAC3 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" Some conditions which don't change and which can therefore be checked in read_header() were instead rechecked upon parsing each block. This has been changed. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 1dc0b77962..5643e15a20 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2624,7 +2624,8 @@ static int matroska_parse_tracks(AVFormatContext *s) return AVERROR_INVALIDDATA; track->audio.sub_packet_size = ff_sipr_subpk_size[flavor]; st->codecpar->bit_rate = sipr_bit_rate[flavor]; - } else if (track->audio.sub_packet_size <= 0) + } else if (track->audio.sub_packet_size <= 0 || + track->audio.frame_size % track->audio.sub_packet_size) return AVERROR_INVALIDDATA; st->codecpar->block_align = track->audio.sub_packet_size; extradata_offset = 78; @@ -3138,7 +3139,7 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, } memcpy(track->audio.buf + y * w, data, w); } else { - if (size < sps * w / sps || h<=0 || w%sps) { + if (size < w) { av_log(matroska->ctx, AV_LOG_ERROR, "Corrupt generic RM-style audio packet size\n"); return AVERROR_INVALIDDATA; From patchwork Thu Apr 23 03:07:37 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19189 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 CDBED44BA43 for ; Thu, 23 Apr 2020 06:08:26 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BF11F68BE40; Thu, 23 Apr 2020 06:08:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6105468BE0E for ; Thu, 23 Apr 2020 06:08:14 +0300 (EEST) Received: by mail-wm1-f67.google.com with SMTP id 188so4771399wmc.2 for ; Wed, 22 Apr 2020 20:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SChYUNhYjJfZamLzA17hbsWIfYmncgimpXeN6R3U1c4=; b=DJ550QYfl8/YMjyq+sQimDyzW6EGlJ8048NnlkvHXm/LNePX8H888XTZY7o1wjvEZj VXU/pi5unK29hZNGcViNanALocHjevaQHIpy/rXJLDY5Yb8rDZKo/w4EBaxf/GXsJWva QjdUsofUqb2l8esFhHZiuWLJJZWcKmOcSyyTdZQXW34z9F2lIRjpldZ3547gGNZN/bWI lnUeaCFzuVTA6zkNxZQ38N25ILeZxyHD6xXLHLxdq5Pqp539sfyP+kl1sifaNDDJCwg9 mhSUQXVVAGaVleygnLRhiWmoaJTy7hHY7Ard0+VYm20DO7L/I6rg8nYc4rVTm+anAZBY Itbw== 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=SChYUNhYjJfZamLzA17hbsWIfYmncgimpXeN6R3U1c4=; b=daYpglW1boDPkQeCFYVDRY5+IUn9uuQ8hApzJVx57zzgXRRhG99JN3u+k6bQAW9p9F 29dOi9Co6YbmTe1Yx6ejpQWK5011nBRIzioRdXDziwQ0PmtsLcUxOGcCggltO41n7gac GNKITDwR/zAaAL7xaVpAqwDL7b2CEep2OsfnNz0xkvFsgFQdfNZGT6Tv6GaSrsbQAy+c Kd30NDK2QRfxD5dCt8RmZWgTq9YzSu415qtUf+TwGDMGIEkOc3EZ7iJ0dSF3AYfN4qNR APGpBtZ28YJ7tAK3Xj3YJTJ1XWBqhMX9BOAivR57lnmx7flv9QsZuKd+yKLtra8tUAC7 BPqg== X-Gm-Message-State: AGi0PuZcDeNi8g4/7cUAK4ZNMGhtLGvu8W7a8exkbiiTh9d6y+GOaYFn YK4V1bPiS92FzcyW++HxFynciwfr X-Google-Smtp-Source: APiQypKvZveG0EMOEKnpYNS2NNF/ktaIz+Rj8kLjAiA42HEWpS6WHGndZp5LGt6PNX6ZXPu7ljkcOA== X-Received: by 2002:a1c:9852:: with SMTP id a79mr1587067wme.27.1587611293501; Wed, 22 Apr 2020 20:08:13 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:12 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:37 +0200 Message-Id: <20200423030741.12158-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/11] avformat/matroskadec: Don't discard valid packets 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" A Block (meaning both a Block in a BlockGroup as well as a SimpleBlock) must have at least three bytes after the field containing the encoded TrackNumber. So if there are <= 3 bytes, the Matroska demuxer would skip this block, believing it to be an empty, but valid Block. This might discard valid nonempty Blocks, namely if the track uses header stripping. And certain definitely spec-incompliant Blocks don't raise errors: Those with two or less bytes left after the encoded TrackNumber and those with three bytes left, but with flags indicating that the Block uses lacing as then there has to be further data describing the lacing. Furthermore, zero-sized packets were still possible because only the size of the last entry of a lace was checked. This commit fixes this. All spec-compliant Blocks that contain data (even if side data only) are now returned to the caller; spec-compliant Blocks that don't contain anything are not returned. Signed-off-by: Andreas Rheinhardt --- I don't know if side data-only packets can cause problems in other contexts; but they at least contain something, so they should not be ignored. libavformat/matroskadec.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 5643e15a20..3b1b447d8a 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3020,7 +3020,9 @@ static int matroska_parse_laces(MatroskaDemuxContext *matroska, uint8_t **buf, return 0; } - av_assert0(size > 0); + if (size <= 0) + return AVERROR_INVALIDDATA; + *laces = *data + 1; data += 1; size -= 1; @@ -3046,7 +3048,7 @@ static int matroska_parse_laces(MatroskaDemuxContext *matroska, uint8_t **buf, break; } } - if (size <= total) { + if (size < total) { return AVERROR_INVALIDDATA; } @@ -3093,7 +3095,7 @@ static int matroska_parse_laces(MatroskaDemuxContext *matroska, uint8_t **buf, } data += offset; size -= offset; - if (size <= total) { + if (size < total) { return AVERROR_INVALIDDATA; } lace_size[*laces - 1] = size - total; @@ -3413,7 +3415,7 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, { MatroskaTrackEncoding *encodings = track->encodings.elem; uint8_t *pkt_data = data; - int res; + int res = 0; AVPacket pktl, *pkt = &pktl; if (encodings && !encodings->type && encodings->scope & 1) { @@ -3449,6 +3451,9 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, pkt_data = pr_data; } + if (!pkt_size && !additional_size) + goto no_output; + av_init_packet(pkt); if (pkt_data != data) pkt->buf = av_buffer_create(pkt_data, pkt_size + AV_INPUT_BUFFER_PADDING_SIZE, @@ -3519,6 +3524,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return 0; +no_output: fail: if (pkt_data != data) av_freep(&pkt_data); @@ -3554,8 +3560,8 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf av_log(matroska->ctx, AV_LOG_INFO, "Invalid stream %"PRIu64"\n", num); return AVERROR_INVALIDDATA; - } else if (size <= 3) - return 0; + } else if (size < 3) + return AVERROR_INVALIDDATA; st = track->stream; if (st->discard >= AVDISCARD_ALL) return res; From patchwork Thu Apr 23 03:07:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19190 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 B352444BA43 for ; Thu, 23 Apr 2020 06:08:27 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9860568BE38; Thu, 23 Apr 2020 06:08:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 75AB568BE05 for ; Thu, 23 Apr 2020 06:08:15 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id x17so4291698wrt.5 for ; Wed, 22 Apr 2020 20:08:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yUnbRtoApjh+Xm93rvjm8XxUXGcb+K4NFixHNRRWZCk=; b=ZsjvSjfZRgW5ycKonjPxsOZbYd18Jzt7FeAviIlB/ynoslO23+tstQXFroa32HuTqj AFFWPDNQmjEDiUDx2vGIP01O/1HuYSoQ0/JkOakAbNq6B6W0ZPG2jESmP360TMlw2rBP dGU1omt9ut9k88DRYkq3EXeP9tlMY/cUZiwVTP5WTCr2IzkHTaeZnGvpSkHO8RqVQkOD iiSq69bu/tKtn0FjxN6H73Mw2bU+P/i6+mlorzUdgbYDu26me49um3RYBmZAk+j0sO8r K7DUTAAHZBmzShlleSX1R7Utb8JYC2VDszTO/BosnW4CwXZlDvQxVTD0MN+MlNTxNItz TuWA== 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=yUnbRtoApjh+Xm93rvjm8XxUXGcb+K4NFixHNRRWZCk=; b=UP0Kd9LVZKA7+M6hkMYSKX7ED6jB7WbzBWW+efGtGqjteAsIZah1d6C/vFmmH+rD43 Dopvy8GJB90CoaGSeEbJAL4jAA2gcf9iiugtEhgDRvgv/NvOph/FS1WRxlPGJIXE1YPQ eJMgriqwxgNQdv/xGhhlPoOOObUENEApDFN165abarojfk1/gda3vWjbKtfyY1na7z9b //7Qpf9X3JVjwXgV9+LAYrC5/yWqaJQYs0wG7fjnVKjwOqjNO3y1dTTh2OiYUfCC7YNX bz5MIglLFYkrgWQiAzjn3UbpYqFPsIdMD/2JJywcr0v8SaEt2U64G+fLPQryQ7EVZyOi S4qg== X-Gm-Message-State: AGi0PubmW1sKFnlvsLUHVBuuaBTRqYtV4HWfFiMZIw5XD6zeJprqTl/c hsYn1cn2Th0yyqpSgaUa8eLZA7w6 X-Google-Smtp-Source: APiQypLEksX9tS84zi8umgHX8bnvI+FayoqQIYLI3leQqgkjdmgGrVzEti5UFtnXuwhPy5LM1LNzfw== X-Received: by 2002:adf:c442:: with SMTP id a2mr2284701wrg.110.1587611294475; Wed, 22 Apr 2020 20:08:14 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:13 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:38 +0200 Message-Id: <20200423030741.12158-8-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/11] avformat/matroskadec: Improve forward compability 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" Matroska is built around the principle that a reader does not need to understand everything in a file in order to be able to make use of it; it just needs to ignore the data it doesn't know about. Our demuxer typically follows this principle, but there is one important instance where it does not: A Block belonging to a TrackEntry with no associated stream is treated as invalid data (i.e. the demuxer will try to resync to the next level 1 element because it takes this as a sign that it has lost sync). Given that we do not create streams if we don't know or don't support the type of the TrackEntry, this impairs this demuxer's forward compability. Furthermore, ignoring Blocks belonging to a TrackEntry without corresponding stream can (in future commits) also be used to ignore TrackEntries with obviously bogus entries without affecting the other TrackEntries (by not creating a stream for said TrackEntry). Finally, given that matroska_find_track_by_num() already emits its own error message in case there is no TrackEntry with a given TrackNumber, the error message (with level AV_LOG_INFO) for this can be removed. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 3b1b447d8a..088eeabf2d 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3556,13 +3556,16 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf size -= n; track = matroska_find_track_by_num(matroska, num); - if (!track || !track->stream) { - av_log(matroska->ctx, AV_LOG_INFO, - "Invalid stream %"PRIu64"\n", num); + if (!track || size < 3) return AVERROR_INVALIDDATA; - } else if (size < 3) - return AVERROR_INVALIDDATA; - st = track->stream; + + if (!(st = track->stream)) { + av_log(matroska->ctx, AV_LOG_VERBOSE, + "No stream associated to TrackNumber %"PRIu64". " + "Ignoring Block with this TrackNumber.\n", num); + return 0; + } + if (st->discard >= AVDISCARD_ALL) return res; av_assert1(block_duration != AV_NOPTS_VALUE); From patchwork Thu Apr 23 03:07:39 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19186 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 4C06144BA43 for ; Thu, 23 Apr 2020 06:08:24 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 39AFF68BE28; Thu, 23 Apr 2020 06:08:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3797C68BE00 for ; Thu, 23 Apr 2020 06:08:17 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id d15so3421865wrx.3 for ; Wed, 22 Apr 2020 20:08:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Av8FM9zWap5kaV6nvpbpWFQrf7QCC63I7SeiVybj/Yg=; b=u5qpAlTZvQdkYDq9hNF3297C5n5Ur1soOqPAI5F9eNKSR7rcupJxBIjaI1KwHRZRTm bZV8Ne2+Xn9RTXzibhHZbvUONpNpnQT2EoQTZI3etoVtjfQ0ranZbRwWPlmA5kXLarfc 4iFz4XTJM45W27oGDF8Me818hlPCivTD31gm/fqDx7aLk4wHJ/1zrpZ4cAH/6psFTnP4 2Tm0dpYujypFpD1P9rNeUw2IkAq7bP/4OFsyFg2yXjjoxDbuEVKpOk9lpw9qYrn/Fh90 rAXmiRNQ6jRRxyc1Rp/7pZYM68aOP8UJXWp0bkuvIvYZLMe6vtuUqE5AdSC0AXHfjuyu lbxA== 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=Av8FM9zWap5kaV6nvpbpWFQrf7QCC63I7SeiVybj/Yg=; b=qUZdNgnVGy3/x9fSzQVEdqE64fWwSB8Bph81H+e4mUKTTMyCBVMOxpq7TgI8ZPR28p Sd1JwZoDee9OHn0AgCU5gohlDrafzIceNk+rkvEQsfGy8r02uj3JF/EU4QL3YAX+LacT U+X3QWnpiFDm+e3o5+3YAWJIQxBwRFk/L1pqr6XZL/UWU7jmLEG2X4vi0Pn68U12j+iA rCtKVx8k+JY8AwlJFPPI8z5FCFkw3laMwP5Q6//UtyjUe3bX55rk1itmqs8aavti6ret oIH4aUs7OAmkn2ZJvtuzjMXidkKtR/ShzWeBiChG99qEQgr9paAEFjGgBtytmUrSBF75 FrvA== X-Gm-Message-State: AGi0PubHO+YbtAfZysYrR3OZs3PiKFvuaFGrpObsIfJl3eDVpICCH4fy GolV/E6tVXO5Q74nP92yd1E9LnS1 X-Google-Smtp-Source: APiQypJ+2UL9CIL0oI4JeLVuQdEFk2hvasOtYXzwStvkRnMgwmmXNa+7oYkCPQCZWaUEloJteK8vKw== X-Received: by 2002:adf:9d85:: with SMTP id p5mr2371177wre.101.1587611295569; Wed, 22 Apr 2020 20:08:15 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:14 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:39 +0200 Message-Id: <20200423030741.12158-9-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/11] avformat/matroskadec: Cache whether a track needs to be decoded 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" There is no need to recheck this for every frame. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 088eeabf2d..9e3e98e9c0 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -249,6 +249,7 @@ typedef struct MatroskaTrack { AVStream *stream; int64_t end_timecode; int ms_compat; + int needs_decoding; uint64_t max_block_additional_id; uint32_t palette[AVPALETTE_COUNT]; @@ -2405,6 +2406,11 @@ static int matroska_parse_tracks(AVFormatContext *s) } } } + track->needs_decoding = encodings && !encodings[0].type && + encodings[0].scope & 1 && + (encodings[0].compression.algo != + MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP || + encodings[0].compression.settings.size); for (j = 0; ff_mkv_codec_tags[j].id != AV_CODEC_ID_NONE; j++) { if (!strncmp(ff_mkv_codec_tags[j].str, track->codec_id, @@ -3413,12 +3419,11 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, uint8_t *additional, uint64_t additional_id, int additional_size, int64_t discard_padding) { - MatroskaTrackEncoding *encodings = track->encodings.elem; uint8_t *pkt_data = data; int res = 0; AVPacket pktl, *pkt = &pktl; - if (encodings && !encodings->type && encodings->scope & 1) { + if (track->needs_decoding) { res = matroska_decode_buffer(&pkt_data, &pkt_size, track); if (res < 0) return res; From patchwork Thu Apr 23 03:07:40 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19187 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 25A6A44BA43 for ; Thu, 23 Apr 2020 06:08:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 130DB68BE35; Thu, 23 Apr 2020 06:08:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6596E68BE07 for ; Thu, 23 Apr 2020 06:08:17 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id i10so5014668wrv.10 for ; Wed, 22 Apr 2020 20:08:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qT6PWn0C4ftmVNFnQ8F0fUsqJ8Nv+sMyzzP3xGGaaZI=; b=W96K4yEtlH6FhWXLNpb/053aqcNuUKbdl0mbogqVjpGdV+S5Ch26csYM5AgHcl/oHc NzXSAXhAWaOYvf5jPvuxhv7Lfv39rOu1ZznxOJ3lRL/E5BvCnIH2ayPlVBTRMQgi0XQa Tg+14o79C7/Z1rKvmuFP8jNMMwXNx87xFgAZr3gBGd4WSO82cgu3S7fZ6pJT6gBcCzd4 ix2adXbd2cf7q3NgzGgurhj8sdTgyzWMlt++dECZEwfyl7+Q6a8oHFtxlQzhOeSl2C+w 70r9flpx8axGNEmcW38PJaZIY2PQ2RQ78tsbYEk9AlapGLVYxNeBvxpAs8ICYW3Hrdpa I1Vw== 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=qT6PWn0C4ftmVNFnQ8F0fUsqJ8Nv+sMyzzP3xGGaaZI=; b=TWa7bnLhtNMk9S1/XXIfiyzJBBNdq/nw35SUaEBJTuSpVpJTPANzwPfj8EBiEqPCM2 y6TR3zQO+8geBcVz3UrG3sxgc7IPFCHbidABxrLPKbQrCh8wBtkM43WE90wsdOoX1aW7 8sRYibL/hzbHHpM+av3nwRXpnzrcw7iP+8XrcgQJXSbMALY41y4p3mcq0B8Mzk0pMnpa PsHe1Dt948wa6X3fqoXsGAXXUTPn8G886dCyDASEvZaparaTc+WxE7BmsmHu0k6cGqUY h2p2/TzG+HnJUafxpOUA06CzFKPdldiIznyl/mQtvtWrQy4ZgM94JV3LKW23RfXHrqkz +KJw== X-Gm-Message-State: AGi0PuY3mZDpGANWH2IXfKwqC8kAumS9Shcd26mS5mvn0pXdVvLhucsD NcecPsAbqX8e5mpMRog8ygLB7MDT X-Google-Smtp-Source: APiQypJ+1fitzxxvEGivR292DJk76cTNA2kWMfIPFVet0rPk54GigFAEeMw8ciLabt7dt9+1iPlOEQ== X-Received: by 2002:adf:fa03:: with SMTP id m3mr2359197wrr.68.1587611296455; Wed, 22 Apr 2020 20:08:16 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:15 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:40 +0200 Message-Id: <20200423030741.12158-10-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/11] avformat/matroskadec: Support ContentCompression for all codecs 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" The Matroska demuxer has three functions for creating packets out of the data read: One for certain RealAudio codecs (ATRAC3, cook, sipr, RealAudio 28.8), one for WebVTT (actually, the WebM flavour of it) and one for all the others. Only the last function supported Matroska's ContentCompression (e.g. it reversed zlib compression or added the removed headers to the packets). But in Matroska, all tracks are allowed to be compressed. This commit adds support for this. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 79 ++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 9e3e98e9c0..c16e18cb22 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3192,10 +3192,11 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, } /* reconstruct full wavpack blocks from mangled matroska ones */ -static int matroska_parse_wavpack(MatroskaTrack *track, uint8_t *src, - uint8_t **pdst, int *size) +static int matroska_parse_wavpack(MatroskaTrack *track, + uint8_t **data, int *size) { uint8_t *dst = NULL; + uint8_t *src = *data; int dstlen = 0; int srclen = *size; uint32_t samples; @@ -3265,7 +3266,7 @@ static int matroska_parse_wavpack(MatroskaTrack *track, uint8_t *src, memset(dst + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE); - *pdst = dst; + *data = dst; *size = dstlen; return 0; @@ -3275,8 +3276,8 @@ fail: return ret; } -static int matroska_parse_prores(MatroskaTrack *track, uint8_t *src, - uint8_t **pdst, int *size) +static int matroska_parse_prores(MatroskaTrack *track, + uint8_t **data, int *size) { uint8_t *dst; int dstlen = *size + 8; @@ -3287,10 +3288,10 @@ static int matroska_parse_prores(MatroskaTrack *track, uint8_t *src, AV_WB32(dst, dstlen); AV_WB32(dst + 4, MKBETAG('i', 'c', 'p', 'f')); - memcpy(dst + 8, src, dstlen - 8); + memcpy(dst + 8, *data, dstlen - 8); memset(dst + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE); - *pdst = dst; + *data = dst; *size = dstlen; return 0; @@ -3413,54 +3414,46 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, static int matroska_parse_frame(MatroskaDemuxContext *matroska, MatroskaTrack *track, AVStream *st, - AVBufferRef *buf, uint8_t *data, int pkt_size, + AVBufferRef *buf, uint8_t **data, int pkt_size, uint64_t timecode, uint64_t lace_duration, int64_t pos, int is_keyframe, uint8_t *additional, uint64_t additional_id, int additional_size, int64_t discard_padding) { - uint8_t *pkt_data = data; + uint8_t *pkt_data = *data; int res = 0; AVPacket pktl, *pkt = &pktl; - if (track->needs_decoding) { - res = matroska_decode_buffer(&pkt_data, &pkt_size, track); - if (res < 0) - return res; - } - if (st->codecpar->codec_id == AV_CODEC_ID_WAVPACK) { - uint8_t *wv_data; - res = matroska_parse_wavpack(track, pkt_data, &wv_data, &pkt_size); + res = matroska_parse_wavpack(track, &pkt_data, &pkt_size); if (res < 0) { av_log(matroska->ctx, AV_LOG_ERROR, "Error parsing a wavpack block.\n"); goto fail; } - if (pkt_data != data) - av_freep(&pkt_data); - pkt_data = wv_data; + if (!buf) + av_freep(data); + buf = NULL; } if (st->codecpar->codec_id == AV_CODEC_ID_PRORES && AV_RB32(pkt_data + 4) != MKBETAG('i', 'c', 'p', 'f')) { - uint8_t *pr_data; - res = matroska_parse_prores(track, pkt_data, &pr_data, &pkt_size); + res = matroska_parse_prores(track, &pkt_data, &pkt_size); if (res < 0) { av_log(matroska->ctx, AV_LOG_ERROR, "Error parsing a prores block.\n"); goto fail; } - if (pkt_data != data) - av_freep(&pkt_data); - pkt_data = pr_data; + if (!buf) + av_freep(data); + buf = NULL; } if (!pkt_size && !additional_size) goto no_output; av_init_packet(pkt); - if (pkt_data != data) + if (!buf) pkt->buf = av_buffer_create(pkt_data, pkt_size + AV_INPUT_BUFFER_PADDING_SIZE, NULL, NULL, 0); else @@ -3531,8 +3524,8 @@ FF_ENABLE_DEPRECATION_WARNINGS no_output: fail: - if (pkt_data != data) - av_freep(&pkt_data); + if (!buf) + av_freep(data); return res; } @@ -3634,25 +3627,41 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, AVBufferRef *buf for (n = 0; n < laces; n++) { int64_t lace_duration = block_duration*(n+1) / laces - block_duration*n / laces; + uint8_t *out_data = data; + int out_size = lace_size[n]; + + if (track->needs_decoding) { + res = matroska_decode_buffer(&out_data, &out_size, track); + if (res < 0) + return res; + /* Given that we are here means that out_data is no longer + * owned by buf, so set it to NULL. This depends upon + * zero-length header removal compression being ignored. */ + av_assert1(out_data != data); + buf = NULL; + } if (track->audio.buf) { - res = matroska_parse_rm_audio(matroska, track, st, data, - lace_size[n], + res = matroska_parse_rm_audio(matroska, track, st, + out_data, out_size, timecode, pos); + if (!buf) + av_free(out_data); if (res) return res; - } else if (st->codecpar->codec_id == AV_CODEC_ID_WEBVTT) { res = matroska_parse_webvtt(matroska, track, st, - data, lace_size[n], + out_data, out_size, timecode, lace_duration, pos); + if (!buf) + av_free(out_data); if (res) return res; } else { - res = matroska_parse_frame(matroska, track, st, buf, data, lace_size[n], - timecode, lace_duration, pos, - !n ? is_keyframe : 0, + res = matroska_parse_frame(matroska, track, st, buf, &out_data, + out_size, timecode, lace_duration, + pos, !n ? is_keyframe : 0, additional, additional_id, additional_size, discard_padding); if (res) From patchwork Thu Apr 23 03:07:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19188 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 E278F44BA43 for ; Thu, 23 Apr 2020 06:08:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D1F6768BE3A; Thu, 23 Apr 2020 06:08:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CCE9068BE00 for ; Thu, 23 Apr 2020 06:08:18 +0300 (EEST) Received: by mail-wm1-f67.google.com with SMTP id v4so6365135wme.1 for ; Wed, 22 Apr 2020 20:08:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fzff2u1Kcus8kPKyVmmgcdKhUtcukHK5YwgtqCabcUo=; b=aLa+VAMLAmA1bTVKPYrpyoJdXkPnwhZBxNMM7SUQQFoTXWy4TbbtlGhkCdS3DRAfDu NSHU/0xV2iOoM31BXK9Fmh8ozW4RrkUud7y02ZSourWYYoUvWDLt13AUcmCIqLqJ1H/g SSdYtgDBNdFiV5GX6L0JCR05UyX1PbYvXLeutq2GZAmwEpA7Zk11RfzNbmoN8XXzgP0G Cas5glmKhjy7YDWjur7qk6Sukme7Bfm/ptqg9G2qON7VFhAcoWwaBG6zmnaoDfJUF0MI Afmd3rcosqo5WEd79gOi/2ZTvlKqYGr58dIr1HG5YplrgHI4lSVFSLQueZznkDeS/YWC 6FxA== 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=fzff2u1Kcus8kPKyVmmgcdKhUtcukHK5YwgtqCabcUo=; b=Wx1w+bpvzfwPFXTRXclbTkBubU4wHDedkxq6vQoq1nQZ1Nkcmm91/LWXTI9j8Vj0NV 7RWtE0c5JMTAZNUPyiXv4hU4t9fdbuq6Ry5tX3XRW/gRxFSSUGX+JInoPfw5KCysN6Ej 2adBkAOfjTb+Z+ZNzX27kzNWjwiY0VSLtyJ/yU71mGuOFcRiSAUEJ0Rc08RFrZtnuVqF 5IDfqP1J7T/80un1cR0bu8Upyabh4Ho6D9u7S5JaYJtnw9YTDzrEohnJMU2ua6+FFHVK AuyUqqxAjt/WW1wArMnyjKji1JdgqX20R1TeLy4Wr4OK9bEpSfFEsJLJ+/cbHKNzdLLt VHZw== X-Gm-Message-State: AGi0PuZaKkXBjhCtBnOg6k4D4QLjKM04RNz8oS+4kLpfp4skPVuH5abx RZrk2nf/NLeT/7OOz29Dj4FQ5G24 X-Google-Smtp-Source: APiQypLGojRdQ7zQPEQMjaLaogAnIq0wkDsIt9LPWUNZNjZzIfnDyuzRl5tQepSXgbKKIR8B167IPQ== X-Received: by 2002:a7b:cf1a:: with SMTP id l26mr1719495wmg.114.1587611297770; Wed, 22 Apr 2020 20:08:17 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id m1sm1497733wro.64.2020.04.22.20.08.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 20:08:17 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Apr 2020 05:07:41 +0200 Message-Id: <20200423030741.12158-11-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/11] avformat/matroskadec: Cosmetics 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" Reindentation as well as marking several variables used for demuxing RealAudio as const to clearly see that they don't change during demuxing. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskadec.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index c16e18cb22..917c106258 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3119,12 +3119,12 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, uint8_t *data, int size, uint64_t timecode, int64_t pos) { - int a = st->codecpar->block_align; - int sps = track->audio.sub_packet_size; - int cfs = track->audio.coded_framesize; - int h = track->audio.sub_packet_h; + const int a = st->codecpar->block_align; + const int sps = track->audio.sub_packet_size; + const int cfs = track->audio.coded_framesize; + const int h = track->audio.sub_packet_h; + const int w = track->audio.frame_size; int y = track->audio.sub_packet_cnt; - int w = track->audio.frame_size; int x; if (!track->audio.pkt_cnt) { @@ -3282,14 +3282,14 @@ static int matroska_parse_prores(MatroskaTrack *track, uint8_t *dst; int dstlen = *size + 8; - dst = av_malloc(dstlen + AV_INPUT_BUFFER_PADDING_SIZE); - if (!dst) - return AVERROR(ENOMEM); + dst = av_malloc(dstlen + AV_INPUT_BUFFER_PADDING_SIZE); + if (!dst) + return AVERROR(ENOMEM); - AV_WB32(dst, dstlen); - AV_WB32(dst + 4, MKBETAG('i', 'c', 'p', 'f')); - memcpy(dst + 8, *data, dstlen - 8); - memset(dst + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE); + AV_WB32(dst, dstlen); + AV_WB32(dst + 4, MKBETAG('i', 'c', 'p', 'f')); + memcpy(dst + 8, *data, dstlen - 8); + memset(dst + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE); *data = dst; *size = dstlen; From patchwork Tue Apr 28 12:46:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19318 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 3B08444893D for ; Tue, 28 Apr 2020 15:46:30 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F274268C230; Tue, 28 Apr 2020 15:46:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 322DB68BD9B for ; Tue, 28 Apr 2020 15:46:23 +0300 (EEST) Received: by mail-wm1-f47.google.com with SMTP id y24so2706562wma.4 for ; Tue, 28 Apr 2020 05:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9R+3tzI0uYhxZSklsun4Mt2wGXYBCiwnj8DCKm6Hbdk=; b=k5ttoEtULl1vGpZPKkAK8u+K2Rss8uh3wjwJgF4EI+u4ME3Lmk5p9Dzmo++9P6/zSf I9HWdHOxD/d//Gpzr2xlZWSYjl+JqUvHJzuWV67i9z4r+EYvtcrxf7ALeHA4iOADVrj2 3sHyXG0jzYkq/5ZnMUCimLKDzu/Yf34kh6bqzAxeDeDEsrjuLQT6DH/nIj+OuhbuEn7o 3cEPzeRZGL1/99GZaeuuPUYHg532m5OPxPY9OeYCT7UM5eQZXoy7ul5JDnBIh2JkwxtH 2Tk9pXPy8KqhC91Ht9I30t898PUWmgY6KfzlxAOUTew9krlK8K2wl6M6wcWc760Oha7F xh5g== 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=9R+3tzI0uYhxZSklsun4Mt2wGXYBCiwnj8DCKm6Hbdk=; b=C3vwbcC71e5wSiKDruHY2svTppgbtVWwjdvMCPaJO6UohBMMtxed40HhS/+9/DPvhf 5QCUyaKDRLSgLELPiHhDLsqdyVwkf3HQVnK+WJzoXyj+8684x3CMXNt/m16XFe6lzecS OAJ2hqDHlMb1A6BB7e5oySQtArAXbBSjIycJ1iKEZjDsn1B0sdpVwo/AfOnS0sXun0Bq 1bPMPck/JPwlQSSsX8PWF/s3qVs0QZtnibVjq7WMyqUgdKpwUt3Yzx8wRwxtlVEH0PoK e/6H3HuAK5o5Hdv8KyCt5KV1BD1F8UVrTGSLpdk+ZAeK62axINXrimeivppfsHAjltyJ biIg== X-Gm-Message-State: AGi0PubXfIstZeeZQGXPac1n4na8UoUy5+nde012gJ8cQpQAiYxfD/dG Dre2fMcno6djOvydQ5seoOM+kIt/ X-Google-Smtp-Source: APiQypKNm1fzNI+9VrD2T0OHQdDLXUsIkN7iflxeaWKnIigkq79lQEapPbT4LuXqgrq6O1XAavylfw== X-Received: by 2002:a1c:750a:: with SMTP id o10mr4366677wmc.161.1588077982314; Tue, 28 Apr 2020 05:46:22 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id q8sm3122968wmg.22.2020.04.28.05.46.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Apr 2020 05:46:21 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Apr 2020 14:46:13 +0200 Message-Id: <20200428124613.2369-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> References: <20200423030741.12158-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/12] tests/fate: Add test for zero-length Block 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" It furthermore tests the demuxer's handling of chained SeekHeads, level 1-elements after the Clusters and the muxer's capability of writing huge TrackNumbers as well as expanding the Cues' length field by one byte if necessary to fill the reserved space. It also tests propagation of metadata. Signed-off-by: Andreas Rheinhardt --- tests/fate/matroska.mak | 10 ++++++++++ tests/ref/fate/matroska-zero-length-block | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 tests/ref/fate/matroska-zero-length-block diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index 1d2921194f..101502f668 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -57,6 +57,16 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER OGG_DEMUXER \ += fate-webm-dash-chapters fate-webm-dash-chapters: CMD = transcode ogg $(TARGET_SAMPLES)/vorbis/vorbis_chapter_extension_demo.ogg webm "-c copy -cluster_time_limit 1500 -dash 1 -dash_track_number 124 -reserve_index_space 400" "-c copy -t 0.5" "" -show_chapters +# The input file has a Block whose payload has a size of zero before reversing +# header removal compression; it furthermore uses chained SeekHeads and has +# level 1-elements after the Cluster. This is tested on the demuxer's side. +# For the muxer this tests that it can correctly write huge TrackNumbers and +# that it can expand the Cues element's length field by one byte if necessary. +# It furthermore tests correct propagation of the description tag. +FATE_MATROSKA_FFMPEG_FFPROBE-$(call DEMMUX, MATROSKA, MATROSKA) \ + += fate-matroska-zero-length-block +fate-matroska-zero-length-block: CMD = transcode matroska $(TARGET_SAMPLES)/mkv/zero_length_block.mks matroska "-c:s copy -dash 1 -dash_track_number 2000000000 -reserve_index_space 62 -metadata_header_padding 1" "-c:s copy" "" "-show_entries stream_tags=description" + FATE_MATROSKA_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER) += fate-matroska-spherical-mono fate-matroska-spherical-mono: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mkv/spherical.mkv diff --git a/tests/ref/fate/matroska-zero-length-block b/tests/ref/fate/matroska-zero-length-block new file mode 100644 index 0000000000..8fae333a4d --- /dev/null +++ b/tests/ref/fate/matroska-zero-length-block @@ -0,0 +1,10 @@ +46c2885959b8a72ac4f7a221ba456565 *tests/data/fate/matroska-zero-length-block.matroska +622 tests/data/fate/matroska-zero-length-block.matroska +#tb 0: 1/1000 +#media_type 0: subtitle +#codec_id 0: subrip +0, 1000, 1000, 2000, 5, 0x05b801df +0, 3300, 3300, 3700, 16, 0x300705b2 +[STREAM] +TAG:DESCRIPTION=This track uses header removal compression and has a Block of size zero before reversing it. +[/STREAM]