Make WordPress Core

Ticket #30438: 30438.3.diff

File 30438.3.diff, 2.9 KB (added by akirk, 10 years ago)
  • src/wp-includes/class-wp.php

     
    159159                        list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
    160160                        $self = $_SERVER['PHP_SELF'];
    161161                        $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
     162                        $home_path_escaped = preg_quote( $home_path, '|' );
    162163
    163164                        // Trim path info from the end and the leading home path from the
    164165                        // front. For path info requests, this leaves us with the requesting
     
    166167                        // requested permalink.
    167168                        $req_uri = str_replace($pathinfo, '', $req_uri);
    168169                        $req_uri = trim($req_uri, '/');
    169                         $req_uri = preg_replace("|^$home_path|i", '', $req_uri);
     170                        $req_uri = preg_replace( "|^$home_path_escaped|i", '', $req_uri );
    170171                        $req_uri = trim($req_uri, '/');
    171172                        $pathinfo = trim($pathinfo, '/');
    172                         $pathinfo = preg_replace("|^$home_path|i", '', $pathinfo);
     173                        $pathinfo = preg_replace( "|^$home_path_escaped|i", '', $pathinfo );
    173174                        $pathinfo = trim($pathinfo, '/');
    174175                        $self = trim($self, '/');
    175                         $self = preg_replace("|^$home_path|i", '', $self);
     176                        $self = preg_replace( "|^$home_path_escaped|i", '', $self );
    176177                        $self = trim($self, '/');
    177178
    178179                        // The requested permalink is in $pathinfo for path info requests and
  • tests/phpunit/tests/rewrite.php

     
    66 * @group rewrite
    77 */
    88class Tests_Rewrite extends WP_UnitTestCase {
     9        private $home_url;
    910
    1011        function setUp() {
    1112                global $wp_rewrite;
     
    1819                create_initial_taxonomies();
    1920
    2021                $wp_rewrite->flush_rules();
     22
     23                $this->home_url = get_option( 'home' );
    2124        }
    2225
    2326        function tearDown() {
     
    2427                global $wp_rewrite;
    2528                $wp_rewrite->init();
    2629
     30                update_option( 'home', $this->home_url );
    2731                parent::tearDown();
    2832        }
    2933
     
    7478                $this->assertEquals( 0, url_to_postid( '/example-page/ex/' ) );
    7579        }
    7680
     81        /**
     82         * @ticket 30438
     83         */
     84        function test_parse_request_home_path() {
     85                $home_url = home_url( '/path/' );
     86                update_option( 'home', $home_url );
     87
     88                $this->go_to( $home_url );
     89                $this->assertEquals( array(), $GLOBALS['wp']->query_vars );
     90
     91                $this->go_to( $home_url . 'page' );
     92                $this->assertEquals( array('page' => '', 'pagename' => 'page'), $GLOBALS['wp']->query_vars );
     93        }
     94
     95        /**
     96         * @ticket 30438
     97         */
     98        function test_parse_request_home_path_with_regexchar() {
     99                $home_url = home_url( '/pa+th/' );
     100                update_option( 'home', $home_url );
     101
     102                $this->go_to( $home_url );
     103                $this->assertEquals( array(), $GLOBALS['wp']->query_vars );
     104
     105                $this->go_to( $home_url . 'page' );
     106                $this->assertEquals( array('page' => '', 'pagename' => 'page'), $GLOBALS['wp']->query_vars );
     107        }
     108
    77109        function test_url_to_postid_dupe_path() {
    78110                update_option( 'home', home_url('/example/') );
    79111