From 69bd722cad5a385b6fe73907dd530846cb7b5ffd Mon Sep 17 00:00:00 2001 From: Andy Postnikov Date: Sat, 17 Sep 2022 22:50:21 +0200 Subject: [PATCH 1/3] Revert "Fix parse_url(): can not recognize port without scheme" This reverts commit 72d83709d9524945c93012f7bbb222e412df485a. --- NEWS | 1 - .../tests/url/parse_url_basic_011.phpt | 30 ------------------- ext/standard/url.c | 4 +-- 3 files changed, 2 insertions(+), 33 deletions(-) delete mode 100644 ext/standard/tests/url/parse_url_basic_011.phpt 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 deleted file mode 100644 index 90e42d5b3f106..0000000000000 --- a/ext/standard/tests/url/parse_url_basic_011.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Test parse_url() function: can not recognize port without scheme ---FILE-- - ---EXPECT-- -*** Testing parse_url() :can not recognize port without scheme *** -parse 127.0.0.1:9999? -array(3) { - ["host"]=> - string(9) "127.0.0.1" - ["port"]=> - int(9999) - ["query"]=> - string(0) "" -} -parse 127.0.0.1:9999# -array(3) { - ["host"]=> - string(9) "127.0.0.1" - ["port"]=> - int(9999) - ["fragment"]=> - string(0) "" -} 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)); From d59e64d257de0102b64ff5068e756fcabe398b66 Mon Sep 17 00:00:00 2001 From: Andy Postnikov Date: Sun, 18 Sep 2022 00:08:33 +0200 Subject: [PATCH 2/3] Add test with expected behaviour --- .../tests/url/parse_url_basic_011.phpt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 ext/standard/tests/url/parse_url_basic_011.phpt diff --git a/ext/standard/tests/url/parse_url_basic_011.phpt b/ext/standard/tests/url/parse_url_basic_011.phpt new file mode 100644 index 0000000000000..cf2d676ec9a72 --- /dev/null +++ b/ext/standard/tests/url/parse_url_basic_011.phpt @@ -0,0 +1,30 @@ +--TEST-- +Test parse_url() function: can not recognize port without scheme +--FILE-- + +--EXPECT-- +*** Testing parse_url() :can not recognize port without scheme *** +parse 127.0.0.1:9999? +array(3) { + ["scheme"]=> + string(9) "127.0.0.1" + ["path"]=> + string(4) "9999" + ["query"]=> + string(0) "" +} +parse 127.0.0.1:9999# +array(3) { + ["scheme"]=> + string(9) "127.0.0.1" + ["path"]=> + string(4) "9999" + ["fragment"]=> + string(0) "" +} From f7e396f2ae7cecbb979fbbf86ffde536079c8fec Mon Sep 17 00:00:00 2001 From: Andy Postnikov Date: Tue, 20 Sep 2022 11:06:46 +0200 Subject: [PATCH 3/3] Extend test with Drupal's internal: url and magnet: one --- .../tests/url/parse_url_basic_011.phpt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ext/standard/tests/url/parse_url_basic_011.phpt b/ext/standard/tests/url/parse_url_basic_011.phpt index cf2d676ec9a72..d035299597965 100644 --- a/ext/standard/tests/url/parse_url_basic_011.phpt +++ b/ext/standard/tests/url/parse_url_basic_011.phpt @@ -7,6 +7,10 @@ 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 *** @@ -28,3 +32,17 @@ array(3) { ["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" +}