Make WordPress Core

Ticket #36356: 36356-Fix-potential-undefined-notice.patch

File 36356-Fix-potential-undefined-notice.patch, 2.7 KB (added by jrf, 8 years ago)

Fix for = $url[0]. Includes additional unit tests.

  • src/wp-includes/http.php

    From 73d4c6cbf6fde7dd5651ffcb6bc6c92aeb407ede Mon Sep 17 00:00:00 2001
    Date: Tue, 4 Oct 2016 02:07:02 +0200
    Subject: [PATCH] Fix potential undefined notice on `$url[0]` in
     wp_parse_url().
    
    ---
     src/wp-includes/http.php          |  4 +++-
     tests/phpunit/tests/http/http.php | 18 ++++++++++++++++--
     2 files changed, 19 insertions(+), 3 deletions(-)
    
    diff --git a/src/wp-includes/http.php b/src/wp-includes/http.php
    index 8c26d57..1d18bc8 100644
    a b function wp_parse_url( $url, $component = -1 ) { 
    661661        $schemeless_with_colon = ( '//' === substr( $url, 0, 2 ) && false !== strpos( $url, ':' ) );
    662662
    663663        if ( false === $parts ) {
     664                $url = strval( $url );
     665
    664666                // < PHP 5.4.7 compat, trouble with relative paths including a scheme break in the path.
    665                 if ( '/' === $url[0] && ( false !== strpos( $url, '://' ) || true === $schemeless_with_colon ) ) {
     667                if ( '' !== $url && '/' === $url[0] && ( false !== strpos( $url, '://' ) || true === $schemeless_with_colon ) ) {
    666668                        if ( true === $schemeless_with_colon ) {
    667669                                if ( PHP_URL_SCHEME === $component ) {
    668670                                        return null;
  • tests/phpunit/tests/http/http.php

    diff --git a/tests/phpunit/tests/http/http.php b/tests/phpunit/tests/http/http.php
    index aede069..a3e80e5 100644
    a b class Tests_HTTP_HTTP extends WP_UnitTestCase { 
    132132                                'path'  => '/path1/path2/file.php',
    133133                                'query' => 'q=a',
    134134                        ) ),
     135
     136                        // Empty string or non-string passed in.
     137                        array( '', array(
     138                                'path'  => '',
     139                        ) ),
     140                        array( 123, array(
     141                                'path'  => '123',
     142                        ) ),
    135143                );
    136144                /*
    137145                Untestable edge cases in various PHP:
    class Tests_HTTP_HTTP extends WP_UnitTestCase { 
    215223                        array( 'http://www.test.com/path1/path2/&q=a', PHP_URL_QUERY, 'q=a' ),
    216224                        array( 'http://www.test.com/path1/path2/file.php&q=a', PHP_URL_PATH, '/path1/path2/file.php' ),
    217225                        array( 'http://www.test.com/path1/path2/file.php&q=a', PHP_URL_QUERY, 'q=a' ),
     226
     227                        // Empty string or non-string passed in.
     228                        array( '', PHP_URL_PATH, '' ),
     229                        array( '', PHP_URL_QUERY, null ),
     230                        array( 123, PHP_URL_PORT, null ),
     231                        array( 123, PHP_URL_PATH, '123' ),
    218232                );
    219233        }
    220234
    class Tests_HTTP_HTTP extends WP_UnitTestCase { 
    283297                        array( 'http://example.com/', -1, array( 'scheme' => 'http', 'host' => 'example.com', 'path' => '/' ) ),
    284298                        array( 'http://example.com/', PHP_URL_HOST, 'example.com' ),
    285299                        array( 'http://example.com/', PHP_URL_USER, null ),
    286                         array( 'http:///example.com', -1, false ),
    287                         array( 'http:///example.com', PHP_URL_HOST, null ),
     300                        array( 'http:///example.com', -1, false ), // Malformed.
     301                        array( 'http:///example.com', PHP_URL_HOST, null ), // Malformed.
    288302                );
    289303        }
    290304