Parse request: Quote regular expression characters in home path.
Adds unit tests. props akirk. fixes #30438. git-svn-id: https://develop.svn.wordpress.org/trunk@32708 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
99d0d85fb0
commit
b3660e2731
@ -159,6 +159,7 @@ class WP {
|
|||||||
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
|
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
|
||||||
$self = $_SERVER['PHP_SELF'];
|
$self = $_SERVER['PHP_SELF'];
|
||||||
$home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
|
$home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
|
||||||
|
$home_path_regex = sprintf( '|^%s|i', preg_quote( $home_path, '|' ) );
|
||||||
|
|
||||||
// Trim path info from the end and the leading home path from the
|
// Trim path info from the end and the leading home path from the
|
||||||
// front. For path info requests, this leaves us with the requesting
|
// front. For path info requests, this leaves us with the requesting
|
||||||
@ -166,13 +167,13 @@ class WP {
|
|||||||
// requested permalink.
|
// requested permalink.
|
||||||
$req_uri = str_replace($pathinfo, '', $req_uri);
|
$req_uri = str_replace($pathinfo, '', $req_uri);
|
||||||
$req_uri = trim($req_uri, '/');
|
$req_uri = trim($req_uri, '/');
|
||||||
$req_uri = preg_replace("|^$home_path|i", '', $req_uri);
|
$req_uri = preg_replace( $home_path_regex, '', $req_uri );
|
||||||
$req_uri = trim($req_uri, '/');
|
$req_uri = trim($req_uri, '/');
|
||||||
$pathinfo = trim($pathinfo, '/');
|
$pathinfo = trim($pathinfo, '/');
|
||||||
$pathinfo = preg_replace("|^$home_path|i", '', $pathinfo);
|
$pathinfo = preg_replace( $home_path_regex, '', $pathinfo );
|
||||||
$pathinfo = trim($pathinfo, '/');
|
$pathinfo = trim($pathinfo, '/');
|
||||||
$self = trim($self, '/');
|
$self = trim($self, '/');
|
||||||
$self = preg_replace("|^$home_path|i", '', $self);
|
$self = preg_replace( $home_path_regex, '', $self );
|
||||||
$self = trim($self, '/');
|
$self = trim($self, '/');
|
||||||
|
|
||||||
// The requested permalink is in $pathinfo for path info requests and
|
// The requested permalink is in $pathinfo for path info requests and
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* @group rewrite
|
* @group rewrite
|
||||||
*/
|
*/
|
||||||
class Tests_Rewrite extends WP_UnitTestCase {
|
class Tests_Rewrite extends WP_UnitTestCase {
|
||||||
|
private $home_url;
|
||||||
|
|
||||||
function setUp() {
|
function setUp() {
|
||||||
global $wp_rewrite;
|
global $wp_rewrite;
|
||||||
@ -18,12 +19,15 @@ class Tests_Rewrite extends WP_UnitTestCase {
|
|||||||
create_initial_taxonomies();
|
create_initial_taxonomies();
|
||||||
|
|
||||||
$wp_rewrite->flush_rules();
|
$wp_rewrite->flush_rules();
|
||||||
|
|
||||||
|
$this->home_url = get_option( 'home' );
|
||||||
}
|
}
|
||||||
|
|
||||||
function tearDown() {
|
function tearDown() {
|
||||||
global $wp_rewrite;
|
global $wp_rewrite;
|
||||||
$wp_rewrite->init();
|
$wp_rewrite->init();
|
||||||
|
|
||||||
|
update_option( 'home', $this->home_url );
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,6 +78,39 @@ class Tests_Rewrite extends WP_UnitTestCase {
|
|||||||
$this->assertEquals( 0, url_to_postid( '/example-page/ex/' ) );
|
$this->assertEquals( 0, url_to_postid( '/example-page/ex/' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 30438
|
||||||
|
*/
|
||||||
|
function test_parse_request_home_path() {
|
||||||
|
$home_url = home_url( '/path/' );
|
||||||
|
update_option( 'home', $home_url );
|
||||||
|
|
||||||
|
$this->go_to( $home_url );
|
||||||
|
$this->assertEquals( array(), $GLOBALS['wp']->query_vars );
|
||||||
|
|
||||||
|
$this->go_to( $home_url . 'page' );
|
||||||
|
$this->assertEquals( array( 'page' => '', 'pagename' => 'page' ), $GLOBALS['wp']->query_vars );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 30438
|
||||||
|
*/
|
||||||
|
function test_parse_request_home_path_with_regex_character() {
|
||||||
|
$home_url = home_url( '/ma.ch/' );
|
||||||
|
$not_a_home_url = home_url( '/match/' );
|
||||||
|
update_option( 'home', $home_url );
|
||||||
|
|
||||||
|
$this->go_to( $home_url );
|
||||||
|
$this->assertEquals( array(), $GLOBALS['wp']->query_vars );
|
||||||
|
|
||||||
|
$this->go_to( $home_url . 'page' );
|
||||||
|
$this->assertEquals( array( 'page' => '', 'pagename' => 'page' ), $GLOBALS['wp']->query_vars );
|
||||||
|
|
||||||
|
$this->go_to( $not_a_home_url . 'page' );
|
||||||
|
$this->assertNotEquals( array( 'page' => '', 'pagename' => 'page' ), $GLOBALS['wp']->query_vars );
|
||||||
|
$this->assertEquals( array( 'page' => '', 'pagename' => 'match/page' ), $GLOBALS['wp']->query_vars );
|
||||||
|
}
|
||||||
|
|
||||||
function test_url_to_postid_dupe_path() {
|
function test_url_to_postid_dupe_path() {
|
||||||
update_option( 'home', home_url('/example/') );
|
update_option( 'home', home_url('/example/') );
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user