Message ID | 20201017013646.39268-1-caihaoning83@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [FFmpeg-devel,v2] lavf/url: fix rel path’s query string contains :/ | expand |
Context | Check | Description |
---|---|---|
andriy/x86_make | success | Make finished |
andriy/x86_make_fate | success | Make fate finished |
andriy/PPC64_make | success | Make finished |
andriy/PPC64_make_fate | warning | Make fate failed |
On Sat, 17 Oct 2020, caihaoning83@gmail.com wrote: > From: "ruiquan.crq" <caihaoning83@gmail.com> > > Signed-off-by: ruiquan.crq <caihaoning83@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['?']*/ And why not also add # here as well? With the same logic, there can be URL-s like dummy.mp4#t=0:02:00,121.5 and they will fail currently. Also a more clear wording for the comment: /* lavf "schemes" can contain options but not some RFC 3986 delimiters */ Regards, Marton > 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) > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Marton Balint <cus@passwd.hu> 于2020年10月17日周六 下午4:35写道: > And why not also add # here as well? With the same logic, there can be > URL-s like dummy.mp4#t=0:02:00,121.5 and they will fail currently. > > Also a more clear wording for the comment: > /* lavf "schemes" can contain options but not some RFC 3986 delimiters */ > You are right.
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