From: michaelni via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> To: ffmpeg-devel@ffmpeg.org Cc: michaelni <code@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH] Allow the user to limit metadata length and bext coding history (PR #20642) Date: Fri, 03 Oct 2025 00:28:31 -0000 Message-ID: <175945131258.69.13151872070440336765@bf249f23a2c8> (raw) PR #20642 opened by michaelni URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20642 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20642.patch >From 42e879d0a91dcb4ee5d21329b58ef93014ea3cb3 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <michael@niedermayer.cc> Date: Fri, 3 Oct 2025 00:12:32 +0200 Subject: [PATCH 1/2] avformat: Add max_metadata_length to limit the maximum length of metadata entries Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- doc/APIchanges | 3 +++ libavformat/avformat.h | 8 ++++++++ libavformat/options_table.h | 1 + libavformat/version.h | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 6e7f5d2037..01faaa4dff 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28 API changes, most recent first: +2025-10-xx - xxxxxxxxxx - lavf 62.7.100 - avformat.h + Add max_metadata_length + 2025-08-xx - xxxxxxxxxx - lavf 62.6.100 - oggparsevorbis.h oggparseopus.h oggparseflac.h Drop header packets from secondary chained ogg/{flac, opus, vorbis} streams from demuxer output. diff --git a/libavformat/avformat.h b/libavformat/avformat.h index a7446546e5..2ce09f31fa 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1884,6 +1884,14 @@ typedef struct AVFormatContext { * @see skip_estimate_duration_from_pts */ int64_t duration_probesize; + + /** + * The maximum length of metadata fields. + * This gives demuxers a guideline of what is "too large" + * - encoding: unused + * - decoding: set by user + */ + int max_metadata_length; } AVFormatContext; /** diff --git a/libavformat/options_table.h b/libavformat/options_table.h index 5047b5ce50..1d458c1200 100644 --- a/libavformat/options_table.h +++ b/libavformat/options_table.h @@ -106,6 +106,7 @@ static const AVOption avformat_options[] = { {"skip_estimate_duration_from_pts", "skip duration calculation in estimate_timings_from_pts", OFFSET(skip_estimate_duration_from_pts), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, D}, {"max_probe_packets", "Maximum number of packets to probe a codec", OFFSET(max_probe_packets), AV_OPT_TYPE_INT, { .i64 = 2500 }, 0, INT_MAX, D }, {"duration_probesize", "Maximum number of bytes to probe the durations of the streams in estimate_timings_from_pts", OFFSET(duration_probesize), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, (double)INT64_MAX, D}, +{"max_metadata_length", "Maximum length of metadata fields", OFFSET(max_metadata_length), AV_OPT_TYPE_INT, { .i64 = INT_MAX }, 0, INT_MAX, D }, {NULL}, }; diff --git a/libavformat/version.h b/libavformat/version.h index 4bde82abb4..70c554c19c 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -31,7 +31,7 @@ #include "version_major.h" -#define LIBAVFORMAT_VERSION_MINOR 6 +#define LIBAVFORMAT_VERSION_MINOR 7 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ -- 2.49.1 >From dad6cf719230e6d6c486880d621204d885ef055f Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <michael@niedermayer.cc> Date: Fri, 3 Oct 2025 00:14:46 +0200 Subject: [PATCH 2/2] avformat/wavdec: Limit the BEXT coding history size to the max metadata length The specification has no limit on its size. This can cause allocation of physical memory twice the size of the input file. giving the user a way to limit this makes sense. Even though there are other ways to cause more memory to be allocated. Reported-by: Albin V, AWS Security Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- libavformat/wavdec.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index 7d701c517a..4ee9658be6 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -32,6 +32,7 @@ #include "libavutil/dict.h" #include "libavutil/intreadwrite.h" #include "libavutil/log.h" +#include "libavutil/macros.h" #include "libavutil/mathematics.h" #include "libavutil/mem.h" #include "libavutil/opt.h" @@ -322,15 +323,20 @@ static int wav_parse_bext_tag(AVFormatContext *s, int64_t size) /* CodingHistory present */ size -= 602; - if (!(coding_history = av_malloc(size + 1))) + int read_len = FFMIN3(size, s->max_metadata_length, INT_MAX - 1); + + if (!(coding_history = av_malloc(read_len + 1))) return AVERROR(ENOMEM); - if ((ret = ffio_read_size(s->pb, coding_history, size)) < 0) { + if ((ret = ffio_read_size(s->pb, coding_history, read_len)) < 0) { av_free(coding_history); return ret; } - coding_history[size] = 0; + if (read_len < size) + avio_skip(s->pb, size - read_len); + + coding_history[read_len] = 0; if ((ret = av_dict_set(&s->metadata, "coding_history", coding_history, AV_DICT_DONT_STRDUP_VAL)) < 0) return ret; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org
reply other threads:[~2025-10-03 0:29 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=175945131258.69.13151872070440336765@bf249f23a2c8 \ --to=ffmpeg-devel@ffmpeg.org \ --cc=code@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror http://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ http://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git