diff --git a/NEWS b/NEWS index b54e7aa33b835..5383165d52894 100644 --- a/NEWS +++ b/NEWS @@ -421,7 +421,6 @@ PHP NEWS . Fixed bug GH-7847 (stripos with large haystack has bad performance). (ilutov) . New function memory_reset_peak_usage(). (Patrick Allaert) - . Fixed parse_url(): can not recognize port without scheme. (pandaLIU) - Streams: . Set IP_BIND_ADDRESS_NO_PORT if available when connecting to remote host. diff --git a/ext/standard/tests/url/parse_url_basic_011.phpt b/ext/standard/tests/url/parse_url_basic_011.phpt index 90e42d5b3f106..d035299597965 100644 --- a/ext/standard/tests/url/parse_url_basic_011.phpt +++ b/ext/standard/tests/url/parse_url_basic_011.phpt @@ -7,24 +7,42 @@ echo 'parse 127.0.0.1:9999?', PHP_EOL; var_dump(parse_url('127.0.0.1:9999?')); echo 'parse 127.0.0.1:9999#', PHP_EOL; var_dump(parse_url('127.0.0.1:9999#')); +echo 'parse internal:#feeding', PHP_EOL; +var_dump(parse_url('internal:#feeding')); +echo 'parse magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C', PHP_EOL; +var_dump(parse_url('magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C')); ?> --EXPECT-- *** Testing parse_url() :can not recognize port without scheme *** parse 127.0.0.1:9999? array(3) { - ["host"]=> + ["scheme"]=> string(9) "127.0.0.1" - ["port"]=> - int(9999) + ["path"]=> + string(4) "9999" ["query"]=> string(0) "" } parse 127.0.0.1:9999# array(3) { - ["host"]=> + ["scheme"]=> string(9) "127.0.0.1" - ["port"]=> - int(9999) + ["path"]=> + string(4) "9999" ["fragment"]=> string(0) "" } +parse internal:#feeding +array(2) { + ["scheme"]=> + string(8) "internal" + ["fragment"]=> + string(7) "feeding" +} +parse magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C +array(2) { + ["scheme"]=> + string(6) "magnet" + ["query"]=> + string(44) "xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C" +} diff --git a/ext/standard/url.c b/ext/standard/url.c index b268e9b0df276..e3d95768fb019 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -150,7 +150,7 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port p++; } - if ((p == ue || *p == '/' || *p == '?' || *p == '#') && (p - e) < 7) { + if ((p == ue || *p == '/') && (p - e) < 7) { goto parse_port; } @@ -190,7 +190,7 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port pp++; } - if (pp - p > 0 && pp - p < 6 && (pp == ue || *pp == '/' || *pp == '?' || *pp == '#')) { + if (pp - p > 0 && pp - p < 6 && (pp == ue || *pp == '/')) { zend_long port; char *end; memcpy(port_buf, p, (pp - p));