From: Ilia Alshanetsky Date: Mon, 13 Oct 2003 04:28:34 +0000 (+0000) Subject: MFH: Fixed bug #25800 (parse_url() could not parse urls with empty port). X-Git-Tag: php-4.3.4RC2~26 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c0ddfe89e20fdabb4823788c764a3cd52aad5641;p=php MFH: Fixed bug #25800 (parse_url() could not parse urls with empty port). --- diff --git a/NEWS b/NEWS index 532d53e87b..aab8bbbc6e 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ PHP 4 NEWS POSIX compatible mode. (K.Kosako , Moriyoshi) - Fixed bug #25814 (Make flock() return correct value when 3rd argument is used). (Ilia) +- Fixed bug #25800 (parse_url() could not parse urls with empty port). (Ilia) - Fixed bug #25780 (ext/session: invalid "session.cookie_lifetime" makes session_start() to crash in win32). (Jani) - Fixed bug #25770 (Segfault with PHP and bison 1.875). (eggert@gnu.org, Marcus) diff --git a/ext/standard/tests/strings/url_t.phpt b/ext/standard/tests/strings/url_t.phpt index f3bd83819c..1af113a695 100644 --- a/ext/standard/tests/strings/url_t.phpt +++ b/ext/standard/tests/strings/url_t.phpt @@ -67,7 +67,8 @@ $sample_urls = array ( 'http://user:passwd@www.example.com:8080?bar=1&boom=0', 'file:///path/to/file', '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) { @@ -639,3 +640,13 @@ array(2) { ["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 3490981038..24967ce127 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 {