Make WordPress Core

Changeset 34675


Ignore:
Timestamp:
09/29/2015 01:00:17 AM (9 years ago)
Author:
johnbillion
Message:

Revert r34674 due to failures on PHP < 5.4.

See #16859

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/formatting.php

    r34674 r34675  
    20782078    $dest = $matches[2];
    20792079    $dest = 'http://' . $dest;
     2080    $dest = esc_url($dest);
     2081    if ( empty($dest) )
     2082        return $matches[0];
    20802083
    20812084    // removed trailing [.,;:)] from URL
     
    20842087        $dest = substr($dest, 0, strlen($dest)-1);
    20852088    }
    2086 
    2087     $dest = esc_url($dest);
    2088     if ( empty($dest) )
    2089         return $matches[0];
    2090 
    20912089    return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>$ret";
    20922090}
     
    32813279 * is applied to the returned cleaned URL.
    32823280 *
    3283  * See RFC3986
    3284  *
    32853281 * @since 2.8.0
    32863282 *
     
    32983294
    32993295    $url = str_replace( ' ', '%20', $url );
    3300     $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', $url);
     3296    $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
    33013297
    33023298    if ( '' === $url ) {
     
    33113307    $url = str_replace(';//', '://', $url);
    33123308    /* If the URL doesn't appear to contain a scheme, we
    3313      * presume it needs http:// prepended (unless a relative
     3309     * presume it needs http:// appended (unless a relative
    33143310     * link starting with /, # or ? or a php file).
    33153311     */
     
    33233319        $url = str_replace( '&amp;', '&#038;', $url );
    33243320        $url = str_replace( "'", '&#039;', $url );
    3325     }
    3326 
    3327     if ( ( false !== strpos( $url, '[' ) ) || ( false !== strpos( $url, ']' ) ) ) {
    3328 
    3329         $parsed = parse_url( $url );
    3330         $front  = '';
    3331 
    3332         if ( isset( $parsed['scheme'] ) ) {
    3333             $front .= $parsed['scheme'] . '://';
    3334         } elseif ( '/' === $url[0] ) {
    3335             $front .= '//';
    3336         }
    3337 
    3338         if ( isset( $parsed['user'] ) ) {
    3339             $front .= $parsed['user'];
    3340         }
    3341 
    3342         if ( isset( $parsed['pass'] ) ) {
    3343             $front .= ':' . $parsed['pass'];
    3344         }
    3345 
    3346         if ( isset( $parsed['user'] ) || isset( $parsed['pass'] ) ) {
    3347             $front .= '@';
    3348         }
    3349 
    3350         if ( isset( $parsed['host'] ) ) {
    3351             $front .= $parsed['host'];
    3352         }
    3353 
    3354         if ( isset( $parsed['port'] ) ) {
    3355             $front .= ':' . $parsed['port'];
    3356         }
    3357 
    3358         $end_dirty = str_replace( $front, '', $url );
    3359         $end_clean = str_replace( array( '[', ']' ), array( '%5B', '%5D' ), $end_dirty );
    3360         $url       = str_replace( $end_dirty, $end_clean, $url );
    3361 
    33623321    }
    33633322
  • trunk/tests/phpunit/tests/formatting/EscUrl.php

    r34674 r34675  
    4141
    4242    function test_all_url_parts() {
    43         $url = 'https://user:pass@host.example.com:1234/path;p=1?query=2&r[]=3#fragment';
     43        $url = 'https://user:password@host.example.com:1234/path;p=1?q=2&r=3#fragment';
     44        $this->assertEquals( $url, esc_url_raw( $url ) );
    4445
    45         $this->assertEquals( array(
    46             'scheme'   => 'https',
    47             'host'     => 'host.example.com',
    48             'port'     => 1234,
    49             'user'     => 'user',
    50             'pass'     => 'pass',
    51             'path'     => '/path;p=1',
    52             'query'    => 'query=2&r[]=3',
    53             'fragment' => 'fragment',
    54         ), parse_url( $url ) );
    55         $this->assertEquals( 'https://user:pass@host.example.com:1234/path;p=1?query=2&r%5B%5D=3#fragment', esc_url_raw( $url ) );
    56         $this->assertEquals( 'https://user:pass@host.example.com:1234/path;p=1?query=2&#038;r%5B%5D=3#fragment', esc_url( $url ) );
    57     }
     46        $this->assertEquals( 'https://user:password@host.example.com:1234/path;p=1?q=2&#038;r=3#fragment', esc_url( $url ) );
    5847
    59     function test_all_url_parts_ipv6() {
    60         $url = 'https://user:pass@[::FFFF::127.0.0.1]:1234/path;p=1?query=2&r[]=3#fragment';
    61 
    62         $this->assertEquals( array(
    63             'scheme'   => 'https',
    64             'host'     => '[::FFFF::127.0.0.1]',
    65             'port'     => 1234,
    66             'user'     => 'user',
    67             'pass'     => 'pass',
    68             'path'     => '/path;p=1',
    69             'query'    => 'query=2&r[]=3',
    70             'fragment' => 'fragment',
    71         ), parse_url( $url ) );
    72         $this->assertEquals( 'https://user:pass@[::FFFF::127.0.0.1]:1234/path;p=1?query=2&r%5B%5D=3#fragment', esc_url_raw( $url ) );
    73         $this->assertEquals( 'https://user:pass@[::FFFF::127.0.0.1]:1234/path;p=1?query=2&#038;r%5B%5D=3#fragment', esc_url( $url ) );
     48        $this->assertEquals( 'http://example.com?foo', esc_url( 'http://example.com?foo' ) );
    7449    }
    7550
    7651    function test_bare() {
    77         $this->assertEquals( 'http://example.com?foo', esc_url( 'example.com?foo' ) );
    7852        $this->assertEquals( 'http://example.com', esc_url( 'example.com' ) );
    7953        $this->assertEquals( 'http://localhost', esc_url( 'localhost' ) );
     
    153127
    154128    /**
    155      * @ticket 16859
    156      */
    157     function test_square_brackets() {
    158         $this->assertEquals( '/example.php?one%5B%5D=two', esc_url( '/example.php?one[]=two' ) );
    159         $this->assertEquals( '?foo%5Bbar%5D=baz', esc_url( '?foo[bar]=baz' ) );
    160         $this->assertEquals( '//example.com/?foo%5Bbar%5D=baz', esc_url( '//example.com/?foo[bar]=baz' ) );
    161         $this->assertEquals( 'http://example.com/?foo%5Bbar%5D=baz', esc_url( 'example.com/?foo[bar]=baz' ) );
    162         $this->assertEquals( 'http://localhost?foo%5Bbar%5D=baz', esc_url( 'localhost?foo[bar]=baz' ) );
    163         $this->assertEquals( 'http://user:pass@localhost/?foo%5Bbar%5D=baz', esc_url( 'http://user:pass@localhost/?foo[bar]=baz' ) );
    164         $this->assertEquals( 'http://localhost?foo%5Bbar%5D=baz', esc_url( 'localhost?foo[bar]=baz' ) );
    165         $this->assertEquals( 'http://example.com/?foo%5Bbar%5D=baz', esc_url( 'http://example.com/?foo[bar]=baz' ) );
    166         $this->assertEquals( 'http://example.com:1234/?foo%5Bbar%5D=baz', esc_url( 'http://example.com:1234/?foo[bar]=baz' ) );
    167         $this->assertEquals( 'http://example.com/?foo%5Bbar%5D=baz', esc_url( 'http://example.com/?foo%5Bbar%5D=baz' ) );
    168         $this->assertEquals( 'http://example.com/?baz=bar&#038;foo%5Bbar%5D=baz', esc_url( 'http://example.com/?baz=bar&foo[bar]=baz' ) );
    169         $this->assertEquals( 'http://example.com/?baz=bar&#038;foo%5Bbar%5D=baz', esc_url( 'http://example.com/?baz=bar&#038;foo%5Bbar%5D=baz' ) );
    170     }
    171 
    172     /**
    173      * @ticket 16859
    174      */
    175     function test_ipv6_hosts() {
    176         $this->assertEquals( '//[::127.0.0.1]', esc_url( '//[::127.0.0.1]' ) );
    177         $this->assertEquals( 'http://[::FFFF::127.0.0.1]', esc_url( 'http://[::FFFF::127.0.0.1]' ) );
    178         $this->assertEquals( 'http://[::127.0.0.1]', esc_url( 'http://[::127.0.0.1]' ) );
    179         $this->assertEquals( 'http://[::DEAD:BEEF:DEAD:BEEF:DEAD:BEEF:DEAD:BEEF]', esc_url( 'http://[::DEAD:BEEF:DEAD:BEEF:DEAD:BEEF:DEAD:BEEF]' ) );
    180 
    181         // IPv6 with square brackets in the query? Why not.
    182         $this->assertEquals( '//[::FFFF::127.0.0.1]/?foo%5Bbar%5D=baz', esc_url( '//[::FFFF::127.0.0.1]/?foo[bar]=baz' ) );
    183         $this->assertEquals( 'http://[::FFFF::127.0.0.1]/?foo%5Bbar%5D=baz', esc_url( 'http://[::FFFF::127.0.0.1]/?foo[bar]=baz' ) );
    184     }
    185 
    186     /**
    187      * Courtesy of http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding
    188      */
    189     function test_reserved_characters() {
    190         $url = "http://example.com/:@-._~!$&'()*+,=;:@-._~!$&'()*+,=:@-._~!$&'()*+,==?/?:@-._~!$%27()*+,;=/?:@-._~!$%27()*+,;==#/?:@-._~!$&'()*+,;=";
    191         $this->assertEquals( $url, esc_url_raw( $url ) );
    192     }
    193 
    194     /**
    195129     * @ticket 21974
    196130     */
     
    242176     */
    243177    function test_invalid_charaters() {
    244         $this->assertEmpty( esc_url_raw('"^<>{}`') );
     178        $this->assertEmpty( esc_url_raw('"^[]<>{}`') );
    245179    }
    246180
Note: See TracChangeset for help on using the changeset viewer.