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 <c...@passwd.hu> 于2020年10月16日周五 上午3:15写道: > > > 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". _______________________________________________ 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".