* [FFmpeg-devel] [PATCH 1/2] avformat: Add recursion limit
@ 2025-07-07 10:31 Michael Niedermayer
2025-07-07 10:31 ` [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth Michael Niedermayer
0 siblings, 1 reply; 6+ messages in thread
From: Michael Niedermayer @ 2025-07-07 10:31 UTC (permalink / raw)
To: FFmpeg development discussions and patches; +Cc: Yuhao Jiang
This is a generic recursion limit that is not specific to a demuxer
it does change public API which makes this unsuitable for backporting
Fixes: self_ref.ffconcat
Reported-by: Yuhao Jiang <danisjiang@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
libavformat/avformat.c | 5 +++++
libavformat/avformat.h | 9 +++++++++
libavformat/options_table.h | 1 +
3 files changed, 15 insertions(+)
diff --git a/libavformat/avformat.c b/libavformat/avformat.c
index 18ca4643eec..dca46395ac7 100644
--- a/libavformat/avformat.c
+++ b/libavformat/avformat.c
@@ -844,6 +844,11 @@ int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
*(char **)((char*)dst + offsets[i]) = dst_str;
}
}
+ if (src->recursion_limit <= 0) {
+ av_log(dst, AV_LOG_ERROR, "Too deep recursion\n");
+ return AVERROR(ELOOP);
+ }
+ dst->recursion_limit = src->recursion_limit - 1;
return 0;
}
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index b6c63e22376..ef1cf5d5a76 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -1884,6 +1884,15 @@ typedef struct AVFormatContext {
* @see skip_estimate_duration_from_pts
*/
int64_t duration_probesize;
+
+ /**
+ * Depth recursion limit,
+ *
+ * The maximum recursion depth that a Demuxer can open a Demuxer within itself.
+ *
+ * - demuxing: Set by user
+ */
+ int recursion_limit;
} AVFormatContext;
/**
diff --git a/libavformat/options_table.h b/libavformat/options_table.h
index e2e690fd2ae..8275570dae6 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, INT64_MAX, D},
+{"recursion_limit", "Maximum number of times a demuxer can recursively be opened", OFFSET(recursion_limit), AV_OPT_TYPE_INT, {.i64 = 10 }, 0, INT64_MAX, D},
{NULL},
};
--
2.49.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth
2025-07-07 10:31 [FFmpeg-devel] [PATCH 1/2] avformat: Add recursion limit Michael Niedermayer
@ 2025-07-07 10:31 ` Michael Niedermayer
2025-07-07 11:05 ` Nicolas George
0 siblings, 1 reply; 6+ messages in thread
From: Michael Niedermayer @ 2025-07-07 10:31 UTC (permalink / raw)
To: FFmpeg development discussions and patches; +Cc: Yuhao Jiang
This variant is easy backportable but is concatdec specific
Fixes: self_ref.ffconcat
Reported-by: Yuhao Jiang <danisjiang@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
libavformat/concatdec.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index fe65d0c7688..66b8f417983 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -72,6 +72,7 @@ typedef struct {
ConcatMatchMode stream_match_mode;
unsigned auto_convert;
int segment_time_metadata;
+ int recursion_depth;
} ConcatContext;
static int concat_probe(const AVProbeData *probe)
@@ -356,6 +357,8 @@ static int open_file(AVFormatContext *avf, unsigned fileno)
if (ret < 0)
return ret;
+ av_dict_set_int(&options, "recursion_depth", cat->recursion_depth - 1, 0);
+
if ((ret = avformat_open_input(&cat->avf, file->url, NULL, &options)) < 0 ||
(ret = avformat_find_stream_info(cat->avf, NULL)) < 0) {
av_log(avf, AV_LOG_ERROR, "Impossible to open '%s'\n", file->url);
@@ -363,6 +366,7 @@ static int open_file(AVFormatContext *avf, unsigned fileno)
avformat_close_input(&cat->avf);
return ret;
}
+ av_dict_set(&options, "recursion_depth", NULL, 0);
if (options) {
av_log(avf, AV_LOG_WARNING, "Unused options for '%s'.\n", file->url);
/* TODO log unused options once we have a proper string API */
@@ -664,6 +668,11 @@ static int concat_read_header(AVFormatContext *avf)
unsigned i;
int ret;
+ if (cat->recursion_depth <= 0) {
+ av_log(avf, AV_LOG_ERROR, "Too deep recursion\n");
+ return AVERROR(ELOOP);
+ }
+
ret = concat_parse_script(avf);
if (ret < 0)
return ret;
@@ -939,6 +948,8 @@ static const AVOption options[] = {
OFFSET(auto_convert), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, DEC },
{ "segment_time_metadata", "output file segment start time and duration as packet metadata",
OFFSET(segment_time_metadata), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DEC },
+ { "recursion_depth", "max recursion depth",
+ OFFSET(recursion_depth), AV_OPT_TYPE_INT, {.i64 = 10}, 0, INT_MAX, DEC },
{ NULL }
};
--
2.49.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth
2025-07-07 10:31 ` [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth Michael Niedermayer
@ 2025-07-07 11:05 ` Nicolas George
2025-07-07 14:58 ` Michael Niedermayer
0 siblings, 1 reply; 6+ messages in thread
From: Nicolas George @ 2025-07-07 11:05 UTC (permalink / raw)
To: FFmpeg development discussions and patches; +Cc: Yuhao Jiang
Michael Niedermayer (HE12025-07-07):
> This variant is easy backportable but is concatdec specific
>
> Fixes: self_ref.ffconcat
> Reported-by: Yuhao Jiang <danisjiang@gmail.com>
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
> libavformat/concatdec.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
What use case is it meant to fix?
Regards,
--
Nicolas George
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth
2025-07-07 11:05 ` Nicolas George
@ 2025-07-07 14:58 ` Michael Niedermayer
2025-07-07 15:09 ` Nicolas George
0 siblings, 1 reply; 6+ messages in thread
From: Michael Niedermayer @ 2025-07-07 14:58 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1.1: Type: text/plain, Size: 785 bytes --]
On Mon, Jul 07, 2025 at 01:05:35PM +0200, Nicolas George wrote:
> Michael Niedermayer (HE12025-07-07):
> > This variant is easy backportable but is concatdec specific
> >
> > Fixes: self_ref.ffconcat
> > Reported-by: Yuhao Jiang <danisjiang@gmail.com>
> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > ---
> > libavformat/concatdec.c | 11 +++++++++++
> > 1 file changed, 11 insertions(+)
>
> What use case is it meant to fix?
not overflowing the stack from unlimited recursion
(on some platforms it will stop by exhausting file ids first but we should
not rely on that)
thx
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Some Animals are More Equal Than Others. - George Orwell's book Animal Farm
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
[-- Attachment #2: Type: text/plain, Size: 251 bytes --]
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth
2025-07-07 14:58 ` Michael Niedermayer
@ 2025-07-07 15:09 ` Nicolas George
2025-07-07 20:07 ` Michael Niedermayer
0 siblings, 1 reply; 6+ messages in thread
From: Nicolas George @ 2025-07-07 15:09 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Michael Niedermayer (HE12025-07-07):
> not overflowing the stack from unlimited recursion
What unlimited recursion?
Regards,
--
Nicolas George
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth
2025-07-07 15:09 ` Nicolas George
@ 2025-07-07 20:07 ` Michael Niedermayer
0 siblings, 0 replies; 6+ messages in thread
From: Michael Niedermayer @ 2025-07-07 20:07 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1.1: Type: text/plain, Size: 444 bytes --]
On Mon, Jul 07, 2025 at 05:09:34PM +0200, Nicolas George wrote:
> Michael Niedermayer (HE12025-07-07):
> > not overflowing the stack from unlimited recursion
>
> What unlimited recursion?
a file called self_ref.ffconcat, containing:
ffconcat version 1.0
file self_ref.ffconcat
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
It is what and why we do it that matters, not just one of them.
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
[-- Attachment #2: Type: text/plain, Size: 251 bytes --]
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-07-07 20:07 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-07-07 10:31 [FFmpeg-devel] [PATCH 1/2] avformat: Add recursion limit Michael Niedermayer
2025-07-07 10:31 ` [FFmpeg-devel] [PATCH 2/2] avformat/concatdec: Check recursion depth Michael Niedermayer
2025-07-07 11:05 ` Nicolas George
2025-07-07 14:58 ` Michael Niedermayer
2025-07-07 15:09 ` Nicolas George
2025-07-07 20:07 ` Michael Niedermayer
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 https://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/ https://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