summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTjerk Meesters <datibbaw@php.net>2015-03-06 20:51:22 +0800
committerTjerk Meesters <datibbaw@php.net>2015-03-06 20:51:22 +0800
commitd7fb52ea20aba5c9ef53dfa57af3b62717c9e9e5 (patch)
treee6091462b517eea8b8c19d8047de7cc1e5065b30
parente892f5382f8b2c652932060f1bd345eee4e59b84 (diff)
downloadphp-git-d7fb52ea20aba5c9ef53dfa57af3b62717c9e9e5.tar.gz
Fixed bug #68917 (parse_url fails on some partial urls)
-rw-r--r--NEWS2
-rw-r--r--ext/standard/tests/url/bug68917.phpt23
-rw-r--r--ext/standard/url.c7
3 files changed, 30 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index d326677ba7..879ff28030 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? 2015, PHP 5.5.24
+- Core:
+ . Fixed bug #68917 (parse_url fails on some partial urls). (Wei Dai)
19 Mar 2015, PHP 5.5.23
diff --git a/ext/standard/tests/url/bug68917.phpt b/ext/standard/tests/url/bug68917.phpt
new file mode 100644
index 0000000000..620c8f7285
--- /dev/null
+++ b/ext/standard/tests/url/bug68917.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #68917 (parse_url fails on some partial urls)
+--FILE--
+<?php
+print_r(parse_url('//example.org:81/hi?a=b#c=d'));
+print_r(parse_url('//example.org/hi?a=b#c=d'));
+?>
+--EXPECT--
+Array
+(
+ [host] => example.org
+ [port] => 81
+ [path] => /hi
+ [query] => a=b
+ [fragment] => c=d
+)
+Array
+(
+ [host] => example.org
+ [path] => /hi
+ [query] => a=b
+ [fragment] => c=d
+)
diff --git a/ext/standard/url.c b/ext/standard/url.c
index 31b027a98d..2f56d3186d 100644
--- a/ext/standard/url.c
+++ b/ext/standard/url.c
@@ -192,6 +192,9 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
port = strtol(port_buf, NULL, 10);
if (port > 0 && port <= 65535) {
ret->port = (unsigned short) port;
+ if (*s == '/' && *(s + 1) == '/') { /* relative-scheme URL */
+ s += 2;
+ }
} else {
STR_FREE(ret->scheme);
efree(ret);
@@ -201,12 +204,12 @@ PHPAPI php_url *php_url_parse_ex(char const *str, int length)
STR_FREE(ret->scheme);
efree(ret);
return NULL;
- } else if (*s == '/' && *(s+1) == '/') { /* relative-scheme URL */
+ } else if (*s == '/' && *(s + 1) == '/') { /* relative-scheme URL */
s += 2;
} else {
goto just_path;
}
- } else if (*s == '/' && *(s+1) == '/') { /* relative-scheme URL */
+ } else if (*s == '/' && *(s + 1) == '/') { /* relative-scheme URL */
s += 2;
} else {
just_path: