mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Router::url should passthru //example.com/file.ext
The function allows ://example.com/file.ext but was treating //example.com as cake-relative URL. The updated regex matches URI schemes as defined in RFC2396. Will passthru any of these formats: * Starts with a valid URI scheme (javascript:, https:, itunes:, ftp:) * Starts with a '#' * [NEW] Starts with a '?' which may be meaningless, but is as valid as starting with '#' (RFC1808) * starts with //, or :// (:// is not technically valid, but included for compatibilty)
This commit is contained in:
parent
cfdac5e32d
commit
2fd36bdedc
2 changed files with 8 additions and 1 deletions
|
@ -870,7 +870,7 @@ class Router {
|
||||||
$output = self::_handleNoRoute($url);
|
$output = self::_handleNoRoute($url);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (preg_match('/:\/\/|^(javascript|mailto|tel|sms):|^\#/i', $url)) {
|
if (preg_match('/^([a-z][a-z0-9.+\-]+:|:?\/\/|[#?])/i', $url)) {
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
if (substr($url, 0, 1) === '/') {
|
if (substr($url, 0, 1) === '/') {
|
||||||
|
|
|
@ -2555,6 +2555,9 @@ class RouterTest extends CakeTestCase {
|
||||||
$url = '://example.com';
|
$url = '://example.com';
|
||||||
$this->assertEquals($url, Router::url($url));
|
$this->assertEquals($url, Router::url($url));
|
||||||
|
|
||||||
|
$url = '//example.com';
|
||||||
|
$this->assertEquals($url, Router::url($url));
|
||||||
|
|
||||||
$url = 'javascript:void(0)';
|
$url = 'javascript:void(0)';
|
||||||
$this->assertEquals($url, Router::url($url));
|
$this->assertEquals($url, Router::url($url));
|
||||||
|
|
||||||
|
@ -2566,6 +2569,10 @@ class RouterTest extends CakeTestCase {
|
||||||
|
|
||||||
$url = '#here';
|
$url = '#here';
|
||||||
$this->assertEquals($url, Router::url($url));
|
$this->assertEquals($url, Router::url($url));
|
||||||
|
|
||||||
|
$url = '?param=0';
|
||||||
|
$this->assertEquals($url, Router::url($url));
|
||||||
|
|
||||||
$url = 'posts/index#here';
|
$url = 'posts/index#here';
|
||||||
$expected = FULL_BASE_URL . '/posts/index#here';
|
$expected = FULL_BASE_URL . '/posts/index#here';
|
||||||
$this->assertEquals($expected, Router::url($url, true));
|
$this->assertEquals($expected, Router::url($url, true));
|
||||||
|
|
Loading…
Reference in a new issue