[FFmpeg-devel] [PATCH 1/2 v2] avformat/dashdec: enable overriding of the maximum manifest size
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Tue Sep 1 21:24:35 EEST 2020
Jan Ekström:
> 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 :
You are treating zero as "no limit", despite this not being documented.
> + (filesize > MAX_MANIFEST_SIZE ?
> + filesize : MAX_MANIFEST_SIZE))) < 0 ||
Would be clearer as FFMAX(filesize, MAX_MANIFEST_SIZE). But honestly I
have trouble understanding why you are not just using filesize here
(presuming it is >= 0, which is not checked here or anywhere).
> !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}
> };
>
>
More information about the ffmpeg-devel
mailing list