From 6e74d95f34c7d6352a91eff456d6a69a18953287 Mon Sep 17 00:00:00 2001 From: Pierrick Charron Date: Sun, 13 Mar 2011 04:02:56 +0000 Subject: [PATCH] Fixed bug #54180 (parse_url() incorrectly parses path when ? in fragment) --- ext/standard/tests/url/bug54180.phpt | 32 ++++++++++++++++++++++++++++ ext/standard/url.c | 4 ++++ 2 files changed, 36 insertions(+) create mode 100644 ext/standard/tests/url/bug54180.phpt diff --git a/ext/standard/tests/url/bug54180.phpt b/ext/standard/tests/url/bug54180.phpt new file mode 100644 index 0000000000..2e64e27d07 --- /dev/null +++ b/ext/standard/tests/url/bug54180.phpt @@ -0,0 +1,32 @@ +--TEST-- +Bug #54180 (parse_url() incorrectly parses path when ? in fragment) +--FILE-- + +--EXPECTF-- +array(5) { + ["scheme"]=> + string(4) "http" + ["host"]=> + string(11) "example.com" + ["path"]=> + string(17) "/path/script.html" + ["query"]=> + string(3) "t=1" + ["fragment"]=> + string(13) "fragment?data" +} +array(4) { + ["scheme"]=> + string(4) "http" + ["host"]=> + string(11) "example.com" + ["path"]=> + string(17) "/path/script.html" + ["fragment"]=> + string(13) "fragment?data" +} diff --git a/ext/standard/url.c b/ext/standard/url.c index 29ebbb7699..e516f15982 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -316,6 +316,10 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length) pp = strchr(s, '#'); if (pp && pp < p) { + if (pp - s) { + ret->path = estrndup(s, (pp-s)); + php_replace_controlchars_ex(ret->path, (pp - s)); + } p = pp; goto label_parse; } -- 2.40.0