This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit df963d0b0954d89632a005e28ef8638b47439af4 Author: Kacper Michajłow <[email protected]> AuthorDate: Thu Oct 15 17:14:38 2026 +0200 Commit: Kacper Michajłow <[email protected]> CommitDate: Fri Oct 16 21:16:59 2026 +0000 avformat/dashdec: get the manifest directory with ff_make_absolute_url() Resolve "." against an http(s) manifest URL instead of cutting the URL by the length of its last slash-separated token, which gave a wrong directory for URLs ending with a slash or with a slash in the query. Signed-off-by: Kacper Michajłow <[email protected]> --- libavformat/dashdec.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index f7fb7fec8c..1fe12d1bf7 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -169,7 +169,7 @@ typedef struct DASHContext { } DASHContext; -static int ishttp(char *url) +static int ishttp(const char *url) { const char *proto_name = avio_find_protocol_name(url); return proto_name && av_strstart(proto_name, "http", NULL); @@ -726,12 +726,10 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur { char *tmp_str = NULL; char *path = NULL; - char *mpdName = NULL; xmlNodePtr node = NULL; char *baseurl = NULL; char *root_url = NULL; char *text = NULL; - char *tmp = NULL; int isRootHttp = 0; char token ='/'; int start = 0; @@ -757,18 +755,6 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur updated = add_url_size(&tmp_max_url_size, url_len); if (updated < 0) goto end; - text = av_mallocz(tmp_max_url_size + 1); - if (!text) { - updated = AVERROR(ENOMEM); - goto end; - } - av_strlcpy(text, url, strlen(url)+1); - tmp = text; - while (mpdName = av_strtok(tmp, "/", &tmp)) { - size = strlen(mpdName); - } - av_free(text); - path = av_mallocz(tmp_max_url_size + 2); tmp_str = av_mallocz(tmp_max_url_size + 2); if (!tmp_str || !path) { @@ -776,7 +762,14 @@ static int resolve_content_path(AVFormatContext *s, const char *url, int *max_ur goto end; } - av_strlcpy (path, url, strlen(url) - size + 1); + if (ishttp(url)) { + const char *colon = strchr(url, ':'); + if (colon && colon[1] == '/' && colon[2] == '/') { + updated = ff_make_absolute_url(path, tmp_max_url_size + 2, url, "."); + if (updated < 0) + goto end; + } + } for (rootId = n_baseurl_nodes - 1; rootId > 0; rootId --) { if (!(node = baseurl_nodes[rootId])) { continue; -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
