From patchwork Tue Sep 1 17:45:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 22054 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 55274449C74 for ; Tue, 1 Sep 2020 20:54:17 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E70F68B375; Tue, 1 Sep 2020 20:54:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E866468B27D for ; Tue, 1 Sep 2020 20:54:10 +0300 (EEST) Received: by mail-lj1-f180.google.com with SMTP id c2so2599660ljj.12 for ; Tue, 01 Sep 2020 10:54:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=YOK1Uvim0db5VlC8ahUVwnq8fYer2nET5uaKFyh0/u4=; b=tmZ7l0Zjqfp3r9Xy2z/ypBleLmp0tbS0HIUKrAb1ZDtjciMeYd4Tyiz8THd/8qJIwj 2a0VZM0wguF+RziYhTcOvOapEjLQI+XLnes13GDR3clsFQXzF1R7a3aZCqdYH91n3fhd sFTVhQp6aFjak0qZcCBS23IMcSVoT6Ezd5C6x8Kpcl4DTMogTyz0Ae6i3LLYUX4JVlFm fpsS2qRrprvyHmGG8AWkYaBB9icpQEASXiMvoi8bUw4UeQfQkmB8nSrpUq9UORFE3mWQ Ih0ybq8q9LV88+4YUd9tQ3Ah+8uhbbbx5NQeXgUJD34hQd6a188rdpAaJI8RMw3YzEXf PA+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=YOK1Uvim0db5VlC8ahUVwnq8fYer2nET5uaKFyh0/u4=; b=QkufdeGXe1wOJCaZ6asxWYKsyxz4xnrLg/WfDCozZdmo6PJy952FPq9T3BhEkYVSbw OCRwvqvVSm3H1N+EoMTYLiTSY2toh5mFdA0au5PgA/NTcudMWiV/LTSmgJYoKl+aviRN LZlpq6cY67IE6nu+ySMkD3QmMWq1ipGMmOwRZo0qiCRpuHEQgQFWZhQVGcn3v6LeMBj5 FhN/yRKdVP3qvAoxubWuj47XXaXeqdDwqWu+lxdT0GfTk0Tacc9Q4NekNsfjAvQx2Lgp XfZUM0pgezLRFIEsV+dejJKG5HHW9Djg1KtX+0E6mKoUvpe7op0c17wRPFGimpk2si46 gLKg== X-Gm-Message-State: AOAM533lFLI0/QX10JvRAmpYtGyejcHsLiDtmoeu/hIklMBGiVWCQbQN gufKTxNif0Ji9d53YL3wS37WtU/X+ZA= X-Google-Smtp-Source: ABdhPJzCMVL9Wwwfo/oTFMcMYV7VoQF+Qkaren+nkxaYp9rJzPsYoQdYZN3vJenrSeBOpo8V2hDAzA== X-Received: by 2002:a19:818a:: with SMTP id c132mr1220728lfd.76.1598982348707; Tue, 01 Sep 2020 10:45:48 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id x17sm405116lja.10.2020.09.01.10.45.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2020 10:45:48 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Sep 2020 20:45:46 +0300 Message-Id: <20200901174547.25463-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/dashdec: enable overriding of the maximum manifest size 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This enables people to override the sanity check without compiling a new binary. --- libavformat/dashdec.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index c5a5ff607b..bea9616f4a 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -160,6 +160,7 @@ typedef struct DASHContext { int is_init_section_common_video; int is_init_section_common_audio; + uint64_t maximum_manifest_size; } DASHContext; static int ishttp(char *url) @@ -1256,14 +1257,17 @@ static int parse_manifest(AVFormatContext *s, const char *url, AVIOContext *in) } filesize = avio_size(in); - if (filesize > MAX_MANIFEST_SIZE) { - av_log(s, AV_LOG_ERROR, "Manifest too large: %"PRId64"\n", filesize); + if (c->maximum_manifest_size && filesize > c->maximum_manifest_size) { + av_log(s, AV_LOG_ERROR, + "Manifest size too large: %"PRId64" (this sanity check can be " + "adjusted by using the option 'maximum_manifest_size')\n", + filesize); return AVERROR_INVALIDDATA; } av_bprint_init(&buf, (filesize > 0) ? filesize + 1 : DEFAULT_MANIFEST_SIZE, AV_BPRINT_SIZE_UNLIMITED); - if ((ret = avio_read_to_bprint(in, &buf, MAX_MANIFEST_SIZE)) < 0 || + if ((ret = avio_read_to_bprint(in, &buf, c->maximum_manifest_size)) < 0 || !avio_feof(in) || (filesize = buf.len) == 0) { av_log(s, AV_LOG_ERROR, "Unable to read to manifest '%s'\n", url); @@ -2409,6 +2413,9 @@ static const AVOption dash_options[] = { OFFSET(allowed_extensions), AV_OPT_TYPE_STRING, {.str = "aac,m4a,m4s,m4v,mov,mp4,webm,ts"}, INT_MIN, INT_MAX, FLAGS}, + {"maximum_manifest_size", "Maximum allowed size of the MPEG-DASH manifest to read in bytes", + OFFSET(maximum_manifest_size), AV_OPT_TYPE_UINT64, {.i64 = MAX_MANIFEST_SIZE}, + 0, UINT64_MAX, FLAGS}, {NULL} };