WordPress.org

Make WordPress Core

Ticket #42452: 42452.patch

File 42452.patch, 2.2 KB (added by Frank Klein, 3 years ago)
  • src/wp-includes/rest-api.php

    diff --git src/wp-includes/rest-api.php src/wp-includes/rest-api.php
    index 82d856a063..cba8182af4 100644
    function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) { 
    307307                $path = '/';
    308308        }
    309309
     310        $path = '/' . ltrim( $path, '/' );
     311
    310312        if ( is_multisite() && get_blog_option( $blog_id, 'permalink_structure' ) || get_option( 'permalink_structure' ) ) {
    311313                global $wp_rewrite;
    312314
    function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) { 
    316318                        $url = get_home_url( $blog_id, rest_get_url_prefix(), $scheme );
    317319                }
    318320
    319                 $url .= '/' . ltrim( $path, '/' );
     321                $url .= $path;
    320322        } else {
    321323                $url = trailingslashit( get_home_url( $blog_id, '', $scheme ) );
    322324                // nginx only allows HTTP/1.0 methods when redirecting from / to /index.php
    function get_rest_url( $blog_id = null, $path = '/', $scheme = 'rest' ) { 
    325327                        $url .= 'index.php';
    326328                }
    327329
    328                 $path = '/' . ltrim( $path, '/' );
    329 
    330330                $url = add_query_arg( 'rest_route', $path, $url );
    331331        }
    332332
  • tests/phpunit/tests/rest-api.php

    diff --git tests/phpunit/tests/rest-api.php tests/phpunit/tests/rest-api.php
    index 45c1ccef71..68a07c8899 100644
    class Tests_REST_API extends WP_UnitTestCase { 
    488488
    489489        }
    490490
     491        /**
     492         * @ticket 42452
     493         */
     494        public function test_always_prepend_path_with_slash_in_rest_url_filter() {
     495                $filter = new MockAction();
     496                add_filter( 'rest_url', array( $filter, 'filter' ), 10, 2 );
     497
     498                // Passing no path should return a slash.
     499                get_rest_url();
     500                $args = $filter->get_args();
     501                $this->assertEquals( '/', $args[0][1] );
     502                $filter->reset();
     503
     504                // Paths without a prepended slash should have one added.
     505                get_rest_url( null, 'wp/media/' );
     506                $args = $filter->get_args();
     507                $this->assertEquals( '/wp/media/', $args[0][1] );
     508                $filter->reset();
     509
     510                // Do not modify paths with a prepended slash.
     511                get_rest_url( null, '/wp/media/' );
     512                $args = $filter->get_args();
     513                $this->assertEquals( '/wp/media/', $args[0][1] );
     514
     515                unset( $filter );
     516        }
     517
    491518        public function jsonp_callback_provider() {
    492519                return array(
    493520                        // Standard names