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

Marton Balint cus at passwd.hu
Thu Oct 15 22:15:24 EEST 2020



On Thu, 15 Oct 2020, caihaoning83 at gmail.com wrote:

> 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 */

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 at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list