[FFmpeg-devel] [PATCH v1] lavf/url: fix rel path’s query string contains :/

caihaoning83 at gmail.com caihaoning83 at gmail.com
Thu Oct 15 17:06:44 EEST 2020


From: "ruiquan.crq" <caihaoning83 at gmail.com>

Signed-off-by: ruiquan.crq <caihaoning83 at gmail.com>
---
 libavformat/tests/url.c |  1 +
 libavformat/url.c       | 10 +++++++---
 tests/ref/fate/url      |  4 ++++
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/libavformat/tests/url.c b/libavformat/tests/url.c
index 2440ae08bc..c294795fa2 100644
--- a/libavformat/tests/url.c
+++ b/libavformat/tests/url.c
@@ -90,6 +90,7 @@ int main(void)
     test_decompose("http://[::1]/dev/null");
     test_decompose("http://[::1]:8080/dev/null");
     test_decompose("//ffmpeg/dev/null");
+    test_decompose("test?url=http://server/path");
 
     printf("Testing ff_make_absolute_url:\n");
     test(NULL, "baz");
diff --git a/libavformat/url.c b/libavformat/url.c
index 3c858f0257..2f7aa37e78 100644
--- a/libavformat/url.c
+++ b/libavformat/url.c
@@ -88,7 +88,7 @@ static const char *find_delim(const char *delim, const char *cur, const char *en
 
 int ff_url_decompose(URLComponents *uc, const char *url, const char *end)
 {
-    const char *cur, *aend, *p;
+    const char *cur, *aend, *p, *tq;
 
     av_assert0(url);
     if (!end)
@@ -98,8 +98,12 @@ int ff_url_decompose(URLComponents *uc, const char *url, const char *end)
     /* scheme */
     uc->scheme = cur;
     p = find_delim(":/", cur, end); /* lavf "schemes" can contain options */
-    if (*p == ':')
-        cur = p + 1;
+    if (*p == ':') {
+        tq = find_delim("?", cur, end);
+        if (*tq != '?' || p < tq) { /* not contain "?", or ":/" before "?" */
+            cur = p + 1;
+        }
+    }
 
     /* authority */
     uc->authority = cur;
diff --git a/tests/ref/fate/url b/tests/ref/fate/url
index 7e6395c47b..a9db0251f1 100644
--- a/tests/ref/fate/url
+++ b/tests/ref/fate/url
@@ -43,6 +43,10 @@ http://[::1]:8080/dev/null =>
   host: ffmpeg
   path: /dev/null
 
+test?url=http://server/path =>
+  path: test
+  query: ?url=http://server/path
+
 Testing ff_make_absolute_url:
                                             (null) baz                  => baz
                                           /foo/bar baz                  => /foo/baz
-- 
2.24.1 (Apple Git-126)



More information about the ffmpeg-devel mailing list