Merge pull request #1324 from ignacionr/fix/issue-1323

allow for in-url colon, when port is not specified
This commit is contained in:
Sergey Lyubka 2021-07-31 22:30:04 +01:00 committed by GitHub
commit 3ea4f1fda8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 3 additions and 2 deletions

View File

@ -4045,7 +4045,7 @@ static struct url urlparse(const char *url) {
u.port = 0;
} else if (url[i] == ']') {
u.port = 0; // IPv6 URLs, like http://[::1]/bar
} else if (url[i] == ':' && u.port == 0) {
} else if (url[i] == ':' && u.port == 0 && u.uri == 0) {
u.port = i + 1;
} else if (url[i] == '@' && u.user == 0 && u.pass == 0) {
u.user = u.host;

View File

@ -21,7 +21,7 @@ static struct url urlparse(const char *url) {
u.port = 0;
} else if (url[i] == ']') {
u.port = 0; // IPv6 URLs, like http://[::1]/bar
} else if (url[i] == ':' && u.port == 0) {
} else if (url[i] == ':' && u.port == 0 && u.uri == 0) {
u.port = i + 1;
} else if (url[i] == '@' && u.user == 0 && u.pass == 0) {
u.user = u.host;

View File

@ -125,6 +125,7 @@ static void test_url(void) {
ASSERT(vcmp(mg_url_host("p://u:p@bar:1234/a"), "bar"));
ASSERT(vcmp(mg_url_host("p://u:p@[::1]:1234/a"), "::1"));
ASSERT(vcmp(mg_url_host("p://u:p@[1:2::3]:1234/a"), "1:2::3"));
ASSERT(vcmp(mg_url_host("p://foo/x:y/z"), "foo"));
// Port
ASSERT(mg_url_port("foo:1234") == 1234);