On Thu, 15 Oct 2020, caihaonin...@gmail.com wrote:

From: "ruiquan.crq" <caihaonin...@gmail.com>

Signed-off-by: ruiquan.crq <caihaonin...@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 */

Why not simply add ? and # to the list of delimiters instead?

Nevertheless that would disallow ? and # in lavf specific scheme options. Is it an acceptable tradeoff?

Thanks,
Marton

-    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)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to