diff options
author | Tjerk Meesters <datibbaw@php.net> | 2015-03-06 20:51:22 +0800 |
---|---|---|
committer | Tjerk Meesters <datibbaw@php.net> | 2015-03-06 20:51:22 +0800 |
commit | d7fb52ea20aba5c9ef53dfa57af3b62717c9e9e5 (patch) | |
tree | e6091462b517eea8b8c19d8047de7cc1e5065b30 | |
parent | e892f5382f8b2c652932060f1bd345eee4e59b84 (diff) | |
download | php-git-d7fb52ea20aba5c9ef53dfa57af3b62717c9e9e5.tar.gz |
Fixed bug #68917 (parse_url fails on some partial urls)
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/standard/tests/url/bug68917.phpt | 23 | ||||
-rw-r--r-- | ext/standard/url.c | 7 |
3 files changed, 30 insertions, 2 deletions
@@ -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: |