From: gmirchev at usa dot net
Operating system: Linux
PHP version: 4.3.3
PHP Bug Type: URL related
Bug description: parse_url is not RFC 2396 compliant
Description:
------------
parse_url does not correctly handle these relative URLs:
a.cgi?keywords=6:54+
a.cgi?keywords=6:54
In the reproduce code is correct PHP implementation.
Reproduce code:
---------------
function url_parse($url)
{
$parts = array(
'scheme' => '',
'host' => '',
'port' => '',
'user' => '',
'pass' => '',
'path' => '',
'query' => '',
'fragment' => ''
);
# Regular Expression from RFC 2396 (appendix B)
preg_match('"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"',
$url, $matches);
if (array_key_exists(2, $matches)) $parts['scheme'] = $matches[2];
if (array_key_exists(4, $matches)) $authority = $matches[4];
if (array_key_exists(5, $matches)) $parts['path'] = $matches[5];
if (array_key_exists(7, $matches)) $parts['query'] = $matches[7];
if (array_key_exists(9, $matches)) $parts['fragment'] = $matches[9];
# Extract username, password, host and port from authority
preg_match('"(([^:@]*)(:([^:@]*))?@)?([^:]*)(:(.*))?"', $authority,
$matches);
if (array_key_exists(2, $matches)) $parts['user'] = $matches[2];
if (array_key_exists(4, $matches)) $parts['pass'] = $matches[4];
if (array_key_exists(5, $matches)) $parts['host'] = $matches[5];
if (array_key_exists(7, $matches)) $parts['port'] = $matches[7];
return $parts;
}
--
Edit bug report at http://bugs.php.net/?id=25778&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=25778&r=trysnapshot4
Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=25778&r=trysnapshot5
Fixed in CVS: http://bugs.php.net/fix.php?id=25778&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=25778&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=25778&r=needtrace
Try newer version: http://bugs.php.net/fix.php?id=25778&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=25778&r=support
Expected behavior: http://bugs.php.net/fix.php?id=25778&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=25778&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=25778&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=25778&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=25778&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=25778&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=25778&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=25778&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=25778&r=float