diff --git a/ext/standard/tests/strings/url_t.phpt b/ext/standard/tests/strings/url_t.phpt index 78a6706f541..1af113a6950 100644 --- a/ext/standard/tests/strings/url_t.phpt +++ b/ext/standard/tests/strings/url_t.phpt @@ -64,7 +64,11 @@ $sample_urls = array ( 'mailto:me@mydomain.com', '/foo.php?a=b&c=d', 'foo.php?a=b&c=d', -'http://user:passwd@www.example.com:8080?bar=1&boom=0' +'http://user:passwd@www.example.com:8080?bar=1&boom=0', +'file:///path/to/file', +'file://path/to/file', +'file:/path/to/file', +'http://1.2.3.4:/abc.asp?a=1&b=2' ); foreach ($sample_urls as $url) { @@ -616,3 +620,33 @@ array(6) { ["query"]=> string(12) "bar=1&boom=0" } +array(2) { + ["scheme"]=> + string(4) "file" + ["path"]=> + string(13) "/path/to/file" +} +array(3) { + ["scheme"]=> + string(4) "file" + ["host"]=> + string(4) "path" + ["path"]=> + string(8) "/to/file" +} +array(2) { + ["scheme"]=> + string(4) "file" + ["path"]=> + string(13) "/path/to/file" +} +array(4) { + ["scheme"]=> + string(4) "http" + ["host"]=> + string(7) "1.2.3.4" + ["path"]=> + string(8) "/abc.asp" + ["query"]=> + string(7) "a=1&b=2" +} diff --git a/ext/standard/url.c b/ext/standard/url.c index 3da9f66d940..cdddbf00f1e 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -197,17 +197,17 @@ PHPAPI php_url *php_url_parse(char *str) if ((p = memchr(s, ':', (e-s)))) { if (!ret->port) { p++; - if ( e-p > 5 || e-p < 1 ) { /* port cannot be longer then 5 characters */ + if (e-p > 5) { /* port cannot be longer then 5 characters */ STR_FREE(ret->scheme); STR_FREE(ret->user); STR_FREE(ret->pass); efree(ret); return NULL; + } else if (e - p > 0) { + memcpy(port_buf, p, (e-p)); + port_buf[e-p] = '\0'; + ret->port = atoi(port_buf); } - - memcpy(port_buf, p, (e-p)); - port_buf[e-p] = '\0'; - ret->port = atoi(port_buf); p--; } } else {