From 33b3830f02b01e27d75e5330b548a777380229cc Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Tue, 28 Dec 2021 22:52:18 +0800 Subject: [PATCH 01/11] fixed parse_url --- ext/standard/url.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index e3d95768fb019..b874e468b90a2 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -110,9 +110,15 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port *has_port = 0; s = str; ue = s + length; + char const *ps = memchr(s, '?', length); + + if (! ps) { + ps = s; + } /* parse scheme */ - if ((e = memchr(s, ':', length)) && e != s) { + if ((e = memchr(ps, ':', strlen(ps))) && e != s) { + /* validate scheme */ p = s; while (p < e) { From 9c906d1836eaf7624fb19984cccaf07c18c2af9d Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Tue, 28 Dec 2021 22:58:49 +0800 Subject: [PATCH 02/11] fixed parse_url --- ext/standard/url.c | 1 - test.php | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 test.php diff --git a/ext/standard/url.c b/ext/standard/url.c index b874e468b90a2..79223906cf8cf 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -126,7 +126,6 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port if (!isalpha(*p) && !isdigit(*p) && *p != '+' && *p != '.' && *p != '-') { if (e + 1 < ue && e < binary_strcspn(s, ue, "?#")) { goto parse_port; - } else if (s + 1 < ue && *s == '/' && *(s + 1) == '/') { /* relative-scheme URL */ s += 2; e = 0; goto parse_host; diff --git a/test.php b/test.php new file mode 100644 index 0000000000000..8242142ec7c58 --- /dev/null +++ b/test.php @@ -0,0 +1,5 @@ + Date: Tue, 28 Dec 2021 22:59:43 +0800 Subject: [PATCH 03/11] remove test.php --- test.php | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 test.php diff --git a/test.php b/test.php deleted file mode 100644 index 8242142ec7c58..0000000000000 --- a/test.php +++ /dev/null @@ -1,5 +0,0 @@ - Date: Tue, 28 Dec 2021 23:54:20 +0800 Subject: [PATCH 04/11] Fixed parse_url --- ext/standard/url.c | 15 +++++++-------- test.php | 5 +++++ 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 test.php diff --git a/ext/standard/url.c b/ext/standard/url.c index 79223906cf8cf..04b95230859ba 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -110,15 +110,9 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port *has_port = 0; s = str; ue = s + length; - char const *ps = memchr(s, '?', length); - - if (! ps) { - ps = s; - } /* parse scheme */ - if ((e = memchr(ps, ':', strlen(ps))) && e != s) { - + if ((e = memchr(s, ':', length)) && e != s) { /* validate scheme */ p = s; while (p < e) { @@ -126,6 +120,7 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port if (!isalpha(*p) && !isdigit(*p) && *p != '+' && *p != '.' && *p != '-') { if (e + 1 < ue && e < binary_strcspn(s, ue, "?#")) { goto parse_port; + } else if (s + 1 < ue && *s == '/' && *(s + 1) == '/') { /* relative-scheme URL */ s += 2; e = 0; goto parse_host; @@ -159,6 +154,10 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port goto parse_port; } + // if (*p == '?') { + // goto parse_port; + // } + ret->scheme = zend_string_init(s, (e-s), 0); php_replace_controlchars_ex(ZSTR_VAL(ret->scheme), ZSTR_LEN(ret->scheme)); @@ -195,7 +194,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 == '/')) { + if (pp - p > 0 && pp - p < 6 && (pp == ue || *pp == '/' || *pp == '?')) { zend_long port; char *end; memcpy(port_buf, p, (pp - p)); diff --git a/test.php b/test.php new file mode 100644 index 0000000000000..bdc1c0ed4315b --- /dev/null +++ b/test.php @@ -0,0 +1,5 @@ + Date: Tue, 28 Dec 2021 23:54:50 +0800 Subject: [PATCH 05/11] Fixed parse_url --- ext/standard/url.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index 04b95230859ba..1a40b727ff24d 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -154,10 +154,6 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port goto parse_port; } - // if (*p == '?') { - // goto parse_port; - // } - ret->scheme = zend_string_init(s, (e-s), 0); php_replace_controlchars_ex(ZSTR_VAL(ret->scheme), ZSTR_LEN(ret->scheme)); From c24b9d3464a55674c6172ba324bd70b9de956251 Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Tue, 28 Dec 2021 23:58:37 +0800 Subject: [PATCH 06/11] Fixed parse_url --- ext/standard/url.c | 4 ++++ test.php | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 test.php diff --git a/ext/standard/url.c b/ext/standard/url.c index 1a40b727ff24d..71a2607cb2473 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -154,6 +154,10 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port goto parse_port; } + if (*p == '?') { + goto parse_port; + } + ret->scheme = zend_string_init(s, (e-s), 0); php_replace_controlchars_ex(ZSTR_VAL(ret->scheme), ZSTR_LEN(ret->scheme)); diff --git a/test.php b/test.php deleted file mode 100644 index bdc1c0ed4315b..0000000000000 --- a/test.php +++ /dev/null @@ -1,5 +0,0 @@ - Date: Wed, 29 Dec 2021 00:20:22 +0800 Subject: [PATCH 07/11] Added test case --- .../tests/url/parse_url_error_003.phpt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 ext/standard/tests/url/parse_url_error_003.phpt diff --git a/ext/standard/tests/url/parse_url_error_003.phpt b/ext/standard/tests/url/parse_url_error_003.phpt new file mode 100644 index 0000000000000..2739d409d931b --- /dev/null +++ b/ext/standard/tests/url/parse_url_error_003.phpt @@ -0,0 +1,21 @@ +--TEST-- +Test parse_url() function: The url is 127.0.0.1:9999? +--FILE-- + +--EXPECT-- +*** Testing parse_url() :The url is 127.0.0.1:9999? *** +array(3) { + ["host"]=> + string(9) "127.0.0.1" + ["port"]=> + int(9999) + ["query"]=> + string(0) "" +} +Done From 4bd40935f3df1e94e0c76935158667eca52a731b Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Wed, 29 Dec 2021 01:26:47 +0800 Subject: [PATCH 08/11] update --- ext/standard/url.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index 71a2607cb2473..7bf8ad047cc27 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -150,11 +150,7 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port p++; } - if ((p == ue || *p == '/') && (p - e) < 7) { - goto parse_port; - } - - if (*p == '?') { + if ((p == ue || *p == '/' || *p == '?') && (p - e) < 7) { goto parse_port; } From b7c56966a1dd4b503503a160685e914d6d4479ce Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Thu, 30 Dec 2021 10:26:26 +0800 Subject: [PATCH 09/11] Fixed parse 127.0.0.1:9999# --- .../tests/url/parse_url_error_003.phpt | 26 ++++++++++++++----- ext/standard/url.c | 4 +-- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/ext/standard/tests/url/parse_url_error_003.phpt b/ext/standard/tests/url/parse_url_error_003.phpt index 2739d409d931b..21fd2b181ce50 100644 --- a/ext/standard/tests/url/parse_url_error_003.phpt +++ b/ext/standard/tests/url/parse_url_error_003.phpt @@ -1,16 +1,17 @@ --TEST-- -Test parse_url() function: The url is 127.0.0.1:9999? +Test parse_url() function: can not recognize port without scheme --FILE-- --EXPECT-- -*** Testing parse_url() :The url is 127.0.0.1:9999? *** -array(3) { +*** 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"]=> @@ -18,4 +19,15 @@ array(3) { ["query"]=> string(0) "" } +parse 127.0.0.1:9999#array(3) { + ["host"]=> + string(9) "127.0.0.1" + ["port"]=> + int(9999) + ["fragment"]=> + string(0) "" +} Done + + + diff --git a/ext/standard/url.c b/ext/standard/url.c index 7bf8ad047cc27..b268e9b0df276 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 - e) < 7) { + if ((p == ue || *p == '/' || *p == '?' || *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 == '?')) { + if (pp - p > 0 && pp - p < 6 && (pp == ue || *pp == '/' || *pp == '?' || *pp == '#')) { zend_long port; char *end; memcpy(port_buf, p, (pp - p)); From 61b12c24c161a12e9270715d278b9d0a1f6d23bc Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Thu, 30 Dec 2021 21:25:21 +0800 Subject: [PATCH 10/11] update --- ext/standard/url.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/standard/url.c b/ext/standard/url.c index b268e9b0df276..77596d2b36a52 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -324,6 +324,7 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port } return ret; + } /* }}} */ From 577b728f8710cdf78360b9c463fb6302cf66b04c Mon Sep 17 00:00:00 2001 From: pandaLIU <563883861@qq.com> Date: Thu, 30 Dec 2021 21:25:34 +0800 Subject: [PATCH 11/11] update --- ext/standard/url.c | 1 - 1 file changed, 1 deletion(-) diff --git a/ext/standard/url.c b/ext/standard/url.c index 77596d2b36a52..b268e9b0df276 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -324,7 +324,6 @@ PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, bool *has_port } return ret; - } /* }}} */