WordPress.org

Make WordPress Core

Ticket #36308: 36308.4.diff

File 36308.4.diff, 4.0 KB (added by birgire, 21 months ago)
  • src/wp-includes/functions.php

    diff --git src/wp-includes/functions.php src/wp-includes/functions.php
    index 53a2204..6d89810 100644
    function wp_mkdir_p( $target ) { 
    17151715 * For example, '/foo/bar', or 'c:\windows'.
    17161716 *
    17171717 * @since 2.5.0
     1718 * @since 5.0.0 Allows Windows normalized paths (forward slashes).
    17181719 *
    17191720 * @param string $path File path.
    17201721 * @return bool True if path is absolute, false is not absolute.
    function path_is_absolute( $path ) { 
    17371738                return true;
    17381739        }
    17391740
     1741        // Windows normalized paths for local filesystem and network shares (forward slashes).
     1742        if ( preg_match( '#(^[a-zA-Z]+:/|^//[\w!@\#\$%\^\(\)\-\'{}\.~]{1,15})#', $path ) ) {
     1743                return true;
     1744        }
     1745
    17401746        // A path starting with / or \ is absolute; anything else is relative.
    17411747        return ( $path[0] == '/' || $path[0] == '\\' );
    17421748}
  • src/wp-includes/post.php

    diff --git src/wp-includes/post.php src/wp-includes/post.php
    index 52fb119..3b94f5e 100644
    function create_initial_post_types() { 
    320320function get_attached_file( $attachment_id, $unfiltered = false ) {
    321321        $file = get_post_meta( $attachment_id, '_wp_attached_file', true );
    322322
    323         // If the file is relative, prepend upload dir.
    324         if ( $file && 0 !== strpos( $file, '/' ) && ! preg_match( '|^.:\\\|', $file ) && ( ( $uploads = wp_get_upload_dir() ) && false === $uploads['error'] ) ) {
    325                 $file = $uploads['basedir'] . "/$file";
     323        if ( ( $uploads = wp_get_upload_dir() ) && false === $uploads['error'] ) {
     324                $file = path_join( $uploads['basedir'], $file );
    326325        }
    327326
    328327        if ( $unfiltered ) {
  • tests/phpunit/tests/functions.php

    diff --git tests/phpunit/tests/functions.php tests/phpunit/tests/functions.php
    index d9e3d5f..09f9636 100644
    class Tests_Functions extends WP_UnitTestCase { 
    101101                        'C:\\',
    102102                        'C:\\WINDOWS',
    103103                        '\\\\sambashare\\foo',
     104                        'c:/',
     105                        'c://',
     106                        '//',
     107                        'c:/FOO',
     108                        '//FOO',
     109                        'C:/WWW/Sites/demo/htdocs/wordpress/wp-content/uploads/2016/03/example.jpg',
     110                        '//ComputerName/ShareName/SubfolderName/example.txt',
    104111                );
    105112                foreach ( $absolute_paths as $path ) {
    106113                        $this->assertTrue( path_is_absolute( $path ), "path_is_absolute('$path') should return true" );
    class Tests_Functions extends WP_UnitTestCase { 
    115122                        '../foo',
    116123                        '../',
    117124                        '../foo.bar',
     125                        'foo.bar',
    118126                        'foo/bar',
    119127                        'foo',
    120128                        'FOO',
    121129                        '..\\WINDOWS',
     130                        '..//WINDOWS',
     131                        'c:',
     132                        'C:',
    122133                );
    123134                foreach ( $relative_paths as $path ) {
    124135                        $this->assertFalse( path_is_absolute( $path ), "path_is_absolute('$path') should return false" );
  • tests/phpunit/tests/post.php

    diff --git tests/phpunit/tests/post.php tests/phpunit/tests/post.php
    index c0b20bb..b38e9b8 100644
    class Tests_Post extends WP_UnitTestCase { 
    13541354                $this->assertEquals( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) );
    13551355        }
    13561356
     1357        /**
     1358         * Testing the wp_get_attached_file() function.
     1359         *
     1360         * @ticket 36308
     1361         */
     1362        public function test_wp_get_attached_file() {
     1363
     1364                $post = self::factory()->post->create_and_get(
     1365                        array(
     1366                                'post_title' => 'example-page',
     1367                                'post_type'  => 'post',
     1368                        )
     1369                );
     1370
     1371                // Windows local file system path.
     1372                $attachment      = self::factory()->attachment->create_and_get(
     1373                        array(
     1374                                'post_parent' => $post->ID,
     1375                                'file'        => 'C:/WWW/Sites/demo/htdocs/wordpress/wp-content/uploads/2016/03/example.jpg',
     1376                        )
     1377                );
     1378                $attachment_path = get_attached_file( $attachment->ID );
     1379                $this->assertEquals( $attachment_path, 'C:/WWW/Sites/demo/htdocs/wordpress/wp-content/uploads/2016/03/example.jpg' );
     1380
     1381                // Windows network shares path.
     1382                $attachment      = self::factory()->attachment->create_and_get(
     1383                        array(
     1384                                'post_parent' => $post->ID,
     1385                                'file'        => '//ComputerName/ShareName/SubfolderName/example.txt',
     1386                        )
     1387                );
     1388                $attachment_path = get_attached_file( $attachment->ID );
     1389                $this->assertEquals( $attachment_path, '//ComputerName/ShareName/SubfolderName/example.txt' );
     1390        }
     1391
    13571392}