WordPress.org

Make WordPress Core

Ticket #47980: 47890.2.diff

File 47890.2.diff, 2.8 KB (added by SergeyBiryukov, 12 months ago)
  • src/wp-includes/pluggable.php

     
    14181418                        $path = '';
    14191419                        if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
    14201420                                $path = dirname( parse_url( 'http://placeholder' . $_SERVER['REQUEST_URI'], PHP_URL_PATH ) . '?' );
     1421                                $path = wp_normalize_path( $path );
    14211422                        }
    14221423                        $location = '/' . ltrim( $path . '/', '/' ) . $location;
    14231424                }
  • tests/phpunit/tests/formatting/redirect.php

     
    5858                $this->assertEquals( false, wp_validate_redirect( $url, false ) );
    5959        }
    6060
     61        /**
     62         * @ticket 47980
     63         * @dataProvider relative_url_provider
     64         */
     65        function test_wp_validate_redirect_relative_url( $current_uri, $url, $expected ) {
     66                // Backup the global.
     67                $unset = false;
     68                if ( ! isset( $_SERVER['REQUEST_URI'] ) ) {
     69                        $unset = true;
     70                } else {
     71                        $backup_request_uri = $_SERVER['REQUEST_URI'];
     72                }
     73
     74                // Set the global to current URI.
     75                $_SERVER['REQUEST_URI'] = $current_uri;
     76
     77                $this->assertEquals( $expected, wp_validate_redirect( $url, false ) );
     78
     79                // Delete or reset the global as required.
     80                if ( $unset ) {
     81                        unset( $_SERVER['REQUEST_URI'] );
     82                } else {
     83                        $_SERVER['REQUEST_URI'] = $backup_request_uri;
     84                }
     85        }
     86
    6187        function valid_url_provider() {
    6288                return array(
    6389                        array( 'http://example.com', 'http://example.com' ),
     
    141167                        array( 'http://user.pass@#example.com/' ),
    142168                );
    143169        }
     170
     171        /**
     172         * Data provider for test_wp_validate_redirect_relative_url.
     173         *
     174         * @return array[] {
     175         *      string Current URI (i.e. path and query string only).
     176         *      string Redirect requested.
     177         *      string Expected destination.
     178         * }
     179         */
     180        function relative_url_provider() {
     181                return array(
     182                        array(
     183                                '/',
     184                                'wp-login.php?loggedout=true',
     185                                '/wp-login.php?loggedout=true',
     186                        ),
     187                        array(
     188                                '/src/',
     189                                'wp-login.php?loggedout=true',
     190                                '/src/wp-login.php?loggedout=true',
     191                        ),
     192                        array(
     193                                '/wp-admin/settings.php?page=my-plugin',
     194                                './settings.php?page=my-plugin',
     195                                '/wp-admin/./settings.php?page=my-plugin',
     196                        ),
     197                        array(
     198                                '/wp-admin/settings.php?page=my-plugin',
     199                                '/wp-login.php',
     200                                '/wp-login.php',
     201                        ),
     202                        array(
     203                                '/wp-admin/settings.php?page=my-plugin',
     204                                '../wp-admin/admin.php?page=my-plugin',
     205                                '/wp-admin/../wp-admin/admin.php?page=my-plugin',
     206                        ),
     207                        array(
     208                                '/2019/10/13/my-post',
     209                                '../../',
     210                                '/2019/10/13/../../',
     211                        ),
     212                        array(
     213                                '/2019/10/13/my-post',
     214                                '/',
     215                                '/',
     216                        ),
     217                );
     218        }
    144219}