The branch, master has been updated
       via  5cb6d2221a6d4c07453b6c301ecfcaed48402680 (commit)
      from  56c14f231159d9a0dfa0a46661886c9baad870a6 (commit)


- Log -----------------------------------------------------------------
commit 5cb6d2221a6d4c07453b6c301ecfcaed48402680
Author:     Marvin Scholz <epira...@gmail.com>
AuthorDate: Thu May 22 20:14:49 2025 +0200
Commit:     Marvin Scholz <epira...@gmail.com>
CommitDate: Wed Sep 24 12:03:13 2025 +0000

    avformat/http: Handle IPv6 Zone ID in hostname
    
    When using a literal IPv6 address as hostname, it can contain a Zone ID
    especially in the case of link-local addresses. Sending this to the
    server in the Host header is not useful to the server and in some cases
    servers refuse such requests.
    
    To prevent any such issues, strip the Zone ID from the address if it's
    an IPv6 address. This also removes it for the Cookies lookup.
    
    Based on a patch by: Daniel N Pettersson <danie...@axis.com>

diff --git a/libavformat/http.c b/libavformat/http.c
index 0d4077512b..49d750b512 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -24,6 +24,7 @@
 #include "config.h"
 #include "config_components.h"
 
+#include <string.h>
 #include <time.h>
 #if CONFIG_ZLIB
 #include <zlib.h>
@@ -214,7 +215,7 @@ static int http_open_cnx_internal(URLContext *h, 
AVDictionary **options)
     const char *path, *proxy_path, *lower_proto = "tcp", *local_path;
     char *env_http_proxy, *env_no_proxy;
     char *hashmark;
-    char hostname[1024], hoststr[1024], proto[10];
+    char hostname[1024], hoststr[1024], proto[10], tmp_host[1024];
     char auth[1024], proxyauth[1024] = "";
     char path1[MAX_URL_SIZE], sanitized_path[MAX_URL_SIZE + 1];
     char buf[1024], urlbuf[MAX_URL_SIZE];
@@ -224,7 +225,14 @@ static int http_open_cnx_internal(URLContext *h, 
AVDictionary **options)
     av_url_split(proto, sizeof(proto), auth, sizeof(auth),
                  hostname, sizeof(hostname), &port,
                  path1, sizeof(path1), s->location);
-    ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, hostname, port, NULL);
+
+    av_strlcpy(tmp_host, hostname, sizeof(tmp_host));
+    // In case of an IPv6 address, we need to strip the Zone ID,
+    // if any. We do it at the first % sign, as percent encoding
+    // can be used in the Zone ID itself.
+    if (strchr(tmp_host, ':'))
+        tmp_host[strcspn(tmp_host, "%")] = '\0';
+    ff_url_join(hoststr, sizeof(hoststr), NULL, NULL, tmp_host, port, NULL);
 
     env_http_proxy = getenv_utf8("http_proxy");
     proxy_path = s->http_proxy ? s->http_proxy : env_http_proxy;

-----------------------------------------------------------------------

Summary of changes:
 libavformat/http.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)


hooks/post-receive
-- 

_______________________________________________
ffmpeg-cvslog mailing list -- ffmpeg-cvslog@ffmpeg.org
To unsubscribe send an email to ffmpeg-cvslog-le...@ffmpeg.org

Reply via email to