From patchwork Tue Sep 1 18:02:54 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: 22055 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 C9A6C448EBA for ; Tue, 1 Sep 2020 21:03:03 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AC776689D06; Tue, 1 Sep 2020 21:03:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f54.google.com (mail-lf1-f54.google.com [209.85.167.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5653968037A for ; Tue, 1 Sep 2020 21:02:57 +0300 (EEST) Received: by mail-lf1-f54.google.com with SMTP id y17so1293566lfa.8 for ; Tue, 01 Sep 2020 11:02:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=RtiNT0QKUixW/PKyG+ScBAxr5m22pKTuiARMfD/tW3w=; b=muwWV+YruuFQ/VySNLIOgkjBFehF9HAVxsmdgrcKkQ3hK1aawj+kM3xfT1IqNiyl7T AsIElpwgep4KJO+7bXhKD3+Z8IuXd+3PWzW9NZD7IG0WWbdWszdq9gWD26uPEVECmRU8 McCHKjG3TI3peSM1Vn42XPrLWeJatfL2S6BK4P3ezCXAzadYPCrhQk1ZgHXLv6zUJq4m FQ8C77rjeoCjo0bK2ueG50Yrf8ET6v637OXhga0UfRqT/X+IoW7K5jJ5A+ndcZIJLzWW v3XE1F5ejG8MUkC0b7MadPsP/Bqpuju4l8oPrLYNID6g68MiMuIanzwOTzPRocte++RY 4qaQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=RtiNT0QKUixW/PKyG+ScBAxr5m22pKTuiARMfD/tW3w=; b=W0VQOt3+s6LaHbsRHW0DRevHmOtbdPjuvr6+hquBReAEayyGDTXFOzsgXUeJVgFbpM ynvV5X6QVyfIlX7aDQHP9ypbX/VBkH2HB6wxaNVbdsYMnIkqivg/gxm3ZIZFV8HJ2TWx 9EIPDoz9zNk7JS/mWYn5XOpaXKADNPJ86weLwuRxl3gnRWE/VWP3eKvfQo3QiTZQ/ADC FgLqXf70KP71RyGZ2uThDQRYvH7IsSg2OuV9BideC0eJEwyCjIO3EjgA/X/BOgNb5zy8 xhgMQ2SiLIAUvv1C5d3fhDTUS7UnATLzUJavS1uuwN4zn3rPC+7h98BZbPFQ840SMtd/ 7isQ== X-Gm-Message-State: AOAM530Go3Nz+TIkcP3QqOYKFcYqLOzJmo2SDn+IEV50N8pfxT6ZShxM V3ILoqMmzYQtuufFkqZS3rJODMz7vZU= X-Google-Smtp-Source: ABdhPJyCrsqvzzqXkfmFTRQ1hltEyCBJ7lfcq5UQWDezwVtYNoLMDtiRT8MCNJvCC25WhZV5/S5xhQ== X-Received: by 2002:a19:c38d:: with SMTP id t135mr1215794lff.122.1598983376134; Tue, 01 Sep 2020 11:02:56 -0700 (PDT) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id y24sm435394lfg.75.2020.09.01.11.02.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2020 11:02:55 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Tue, 1 Sep 2020 21:02:54 +0300 Message-Id: <20200901180254.26542-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200901174547.25463-1-jeebjp@gmail.com> References: <20200901174547.25463-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2 v2] 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 | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index c5a5ff607b..4080b9b650 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,21 @@ 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 ? + c->maximum_manifest_size : + (filesize > MAX_MANIFEST_SIZE ? + filesize : MAX_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 +2417,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} };