Fixed bug #68917 (parse_url fails on some partial urls)

This commit is contained in:
Tjerk Meesters 2015-03-06 20:51:22 +08:00
parent e892f5382f
commit d7fb52ea20
3 changed files with 30 additions and 2 deletions

2
NEWS
View File

@ -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

View File

@ -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
)

View File

@ -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: