PR #25341 opened by Timo Rothenpieler (BtbN)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25341
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/25341.patch

ST 429-9 requires Path to be a relative reference within the directory
containing the asset map, so reject absolute paths, URLs and any path
containing a ".." component.

Technically this is a breaking change, but it does create spec-compliance.
Not sure if any valid files of that kind are out in the wild, which would 
necessitate an override-option.


>From 482811d0ffa21032edce6d2be8dc2cab962fa15e Mon Sep 17 00:00:00 2001
From: Timo Rothenpieler <[email protected]>
Date: Wed, 21 Oct 2026 23:14:09 +0200
Subject: [PATCH] avformat/imfdec: reject asset map paths that leave the
 package directory

ST 429-9 requires Path to be a relative reference within the directory
containing the asset map, so reject absolute paths, URLs and any path
containing a ".." component.

Fixes: #YWH-PGM45796-2
Reported-by: BapToutatis

Assisted-by: Claude Mythos 5.1
---
 libavformat/imfdec.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/libavformat/imfdec.c b/libavformat/imfdec.c
index 84b7a4d6e3d..ecf37ba85c1 100644
--- a/libavformat/imfdec.c
+++ b/libavformat/imfdec.c
@@ -154,6 +154,20 @@ static int imf_uri_is_dos_abs_path(const char *string)
     return 0;
 }
 
+static int imf_uri_has_parent_ref(const char *string)
+{
+    while (*string) {
+        size_t len = strcspn(string, "/\\");
+        if (len == 2 && string[0] == '.' && string[1] == '.')
+            return 1;
+        string += len;
+        if (*string)
+            string++;
+    }
+
+    return 0;
+}
+
 static int imf_time_to_ts(int64_t *ts, AVRational t, AVRational time_base)
 {
     int dst_num;
@@ -269,10 +283,17 @@ static int 
parse_imf_asset_map_from_xml_dom(AVFormatContext *s,
             break;
         }
 
-        if (!imf_uri_is_url(uri) && !imf_uri_is_unix_abs_path(uri) && 
!imf_uri_is_dos_abs_path(uri))
-            asset->absolute_uri = av_append_path_component(base_url, uri);
-        else
-            asset->absolute_uri = av_strdup(uri);
+        /* ST 429-9 requires Path to be relative to the asset map directory */
+        if (imf_uri_is_url(uri) || imf_uri_is_unix_abs_path(uri) ||
+            imf_uri_is_dos_abs_path(uri) || imf_uri_has_parent_ref(uri)) {
+            av_log(s, AV_LOG_ERROR, "Unable to parse asset map XML - '%s' not 
relative below asset map dir\n",
+                   uri);
+            xmlFree(uri);
+            ret = AVERROR_INVALIDDATA;
+            break;
+        }
+
+        asset->absolute_uri = av_append_path_component(base_url, uri);
         xmlFree(uri);
         if (!asset->absolute_uri)
             return AVERROR(ENOMEM);
-- 
2.54.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to