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".