summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-09-28 14:52:31 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-09-28 14:52:31 +0000
commite919a873cd49c4a7fe938528cea5fc782ee4fb9b (patch)
tree9ee3147b92d579bad269c7e94b5078648f40891c
parentc0326fb1cec2f6badee7391d66951fba57b62371 (diff)
downloadphp-git-e919a873cd49c4a7fe938528cea5fc782ee4fb9b.tar.gz
Fixed bug #38859 (parse_url() fails if passing '@' in passwd).
-rw-r--r--NEWS1
-rw-r--r--ext/standard/tests/strings/url_t.phpt21
-rw-r--r--ext/standard/url.c2
3 files changed, 21 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 081f955fc4..37f06b5bab 100644
--- a/NEWS
+++ b/NEWS
@@ -16,6 +16,7 @@ PHP NEWS
the imap library). (Ilia)
- Fixed bug #38904 (apache2filter changes cwd to /). (Ilia, bjori)
- Fixed bug #38891 (get_headers() do not work with curl-wrappers). (Ilia)
+- Fixed bug #38859 (parse_url() fails if passing '@' in passwd). (Tony)
- Fixed bug #38844 (curl_easy_strerror() is defined only since cURL 7.12.0).
(Tony)
- Fixed bug #38808 ("maybe ref" issue for current() and others). (Dmitry)
diff --git a/ext/standard/tests/strings/url_t.phpt b/ext/standard/tests/strings/url_t.phpt
index 2d18fa5c03..e0e5411036 100644
--- a/ext/standard/tests/strings/url_t.phpt
+++ b/ext/standard/tests/strings/url_t.phpt
@@ -71,6 +71,7 @@ $sample_urls = array (
'scheme:',
'foo+bar://baz@bang/bla',
'gg:9130731',
+'http://user:@pass@host/path?argument?value#etc',
);
foreach ($sample_urls as $url) {
@@ -525,11 +526,11 @@ array(7) {
["scheme"]=>
string(4) "http"
["host"]=>
- string(19) "hideout@www.php.net"
+ string(11) "www.php.net"
["port"]=>
int(80)
["user"]=>
- string(6) "secret"
+ string(14) "secret@hideout"
["path"]=>
string(10) "/index.php"
["query"]=>
@@ -685,6 +686,22 @@ array(2) {
["path"]=>
string(7) "9130731"
}
+array(7) {
+ ["scheme"]=>
+ string(4) "http"
+ ["host"]=>
+ string(4) "host"
+ ["user"]=>
+ string(4) "user"
+ ["pass"]=>
+ string(5) "@pass"
+ ["path"]=>
+ string(5) "/path"
+ ["query"]=>
+ string(14) "argument?value"
+ ["fragment"]=>
+ string(3) "etc"
+}
string(4) "http"
string(11) "www.php.net"
int(80)
diff --git a/ext/standard/url.c b/ext/standard/url.c
index 0a4bae9410..3f217ef63c 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -211,7 +211,7 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
}
/* check for login and password */
- if ((p = memchr(s, '@', (e-s)))) {
+ if ((p = zend_memrchr(s, '@', (e-s)))) {
if ((pp = memchr(s, ':', (p-s)))) {
if ((pp-s) > 0) {
ret->user = estrndup(s, (pp-s));