[FFmpeg-devel] [PATCH v1] lavf/url: fix rel path’s query string contains :/
蔡昊凝
caihaoning83 at gmail.com
Fri Oct 16 09:48:29 EEST 2020
Simply add ? to the list of delimiters,and add comment.
Signed-off-by: ruiquan.crq <caihaoning83 at gmail.com>
---
libavformat/tests/url.c | 1 +
libavformat/url.c | 2 +-
tests/ref/fate/url | 4 ++++
3 files changed, 6 insertions(+), 1 deletion(-)
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..da5950723e 100644
--- a/libavformat/url.c
+++ b/libavformat/url.c
@@ -97,7 +97,7 @@ 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 */
+ p = find_delim(":/?", cur, end); /* lavf "schemes" can contain
options, or "schemes" can't contains characters['?']*/
if (*p == ':')
cur = p + 1;
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)
蔡昊凝 <caihaoning83 at gmail.com> 于2020年10月16日周五 上午11:24写道:
> Thanks for your reply.
>
> Scheme can't contain ?.
>
> RFC3986 definition of Scheme (https://tools.ietf.org/html/rfc3986#section-3.1)
>
> scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
>
> Delimiters is lavf "schemes" can contain options, and ? should not be part of schemes. So it is not suitable to add ? to the list of delimiters,
>
> although it can reduce one search.
>
> Thans
>
> Alex Cai
>
>
> Marton Balint <cus at passwd.hu> 于2020年10月16日周五 上午3:15写道:
>
>>
>>
>> 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".
>> _______________________________________________
>> 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