mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fix #80114: parse_url does not accept URLs with port 0
URIs with a 0 port are generally valid, so `parse_url()` should recognize such URIs, but still report the port as missing. Co-authored-by: twosee <twose@qq.com> Closes GH-6152.
This commit is contained in:
parent
a7544411df
commit
81b2f3e5d9
3
NEWS
3
NEWS
@ -12,6 +12,9 @@ PHP NEWS
|
||||
. Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data
|
||||
binding). (Nikita)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug #80114 (parse_url does not accept URLs with port 0). (cmb, twosee)
|
||||
|
||||
01 Oct 2020, PHP 7.3.23
|
||||
|
||||
- Core:
|
||||
|
@ -859,6 +859,15 @@ echo "Done";
|
||||
string(3) "%:x"
|
||||
}
|
||||
|
||||
--> https://example.com:0/: array(3) {
|
||||
["scheme"]=>
|
||||
string(5) "https"
|
||||
["host"]=>
|
||||
string(11) "example.com"
|
||||
["path"]=>
|
||||
string(1) "/"
|
||||
}
|
||||
|
||||
--> http:///blah.com: bool(false)
|
||||
|
||||
--> http://:80: bool(false)
|
||||
|
@ -113,6 +113,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : NULL
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : string(5) "https"
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : NULL
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : string(11) "example.com"
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : NULL
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : NULL
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : NULL
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : NULL
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : NULL
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : NULL
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : string(1) "/"
|
||||
--> /rest/Users?filter={"id":"123"} : string(11) "/rest/Users"
|
||||
--> %:x : string(3) "%:x"
|
||||
--> https://example.com:0/ : string(1) "/"
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : string(19) "filter={"id":"123"}"
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : NULL
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -112,6 +112,7 @@ echo "Done";
|
||||
--> / : NULL
|
||||
--> /rest/Users?filter={"id":"123"} : NULL
|
||||
--> %:x : NULL
|
||||
--> https://example.com:0/ : NULL
|
||||
--> http:///blah.com : bool(false)
|
||||
--> http://:80 : bool(false)
|
||||
--> http://user@:80 : bool(false)
|
||||
|
@ -861,6 +861,15 @@ echo "Done";
|
||||
string(3) "%:x"
|
||||
}
|
||||
|
||||
--> https://example.com:0/: array(3) {
|
||||
["scheme"]=>
|
||||
string(5) "https"
|
||||
["host"]=>
|
||||
string(11) "example.com"
|
||||
["path"]=>
|
||||
string(1) "/"
|
||||
}
|
||||
|
||||
--> http:///blah.com: bool(false)
|
||||
|
||||
--> http://:80: bool(false)
|
||||
|
@ -92,6 +92,7 @@ $urls = array(
|
||||
'/',
|
||||
'/rest/Users?filter={"id":"123"}',
|
||||
'%:x',
|
||||
'https://example.com:0/',
|
||||
|
||||
// Severely malformed URLs that do not parse:
|
||||
'http:///blah.com',
|
||||
|
@ -194,10 +194,11 @@ PHPAPI php_url *php_url_parse_ex(char const *str, size_t length)
|
||||
|
||||
if (pp - p > 0 && pp - p < 6 && (pp == ue || *pp == '/')) {
|
||||
zend_long port;
|
||||
char *end;
|
||||
memcpy(port_buf, p, (pp - p));
|
||||
port_buf[pp - p] = '\0';
|
||||
port = ZEND_STRTOL(port_buf, NULL, 10);
|
||||
if (port > 0 && port <= 65535) {
|
||||
port = ZEND_STRTOL(port_buf, &end, 10);
|
||||
if (port >= 0 && port <= 65535 && end != port_buf) {
|
||||
ret->port = (unsigned short) port;
|
||||
if (s + 1 < ue && *s == '/' && *(s + 1) == '/') { /* relative-scheme URL */
|
||||
s += 2;
|
||||
@ -258,10 +259,11 @@ parse_host:
|
||||
return NULL;
|
||||
} else if (e - p > 0) {
|
||||
zend_long port;
|
||||
char *end;
|
||||
memcpy(port_buf, p, (e - p));
|
||||
port_buf[e - p] = '\0';
|
||||
port = ZEND_STRTOL(port_buf, NULL, 10);
|
||||
if (port > 0 && port <= 65535) {
|
||||
port = ZEND_STRTOL(port_buf, &end, 10);
|
||||
if (port >= 0 && port <= 65535 && end != port_buf) {
|
||||
ret->port = (unsigned short)port;
|
||||
} else {
|
||||
php_url_free(ret);
|
||||
|
Loading…
Reference in New Issue
Block a user