Make WordPress Core

Changeset 53934


Ignore:
Timestamp:
08/23/2022 07:57:17 PM (4 years ago)
Author:
antpb
Message:

Media: Account for Windows when normalizing file paths.
Previously, Windows paths in the path_is_absolute function resulted in incorrect URIs. This patch adjusts for forward slashes and adds tests for the get_attached_file function.
Props Whissi, SergeyBiryukov, desrosj, stevenlinx, birgire, davidbaumwald, costdev, peterwilsoncc, audrasjb, hellofromTonya, johnbillion.
Fixes #36308.

Location:
trunk
Files:
1 added
3 edited

Legend:

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

    r53887 r53934  
    20842084 *
    20852085 * @since 2.5.0
     2086 * @since 6.1.0 Allows normalized Windows paths (forward slashes).
    20862087 *
    20872088 * @param string $path File path.
     
    21112112        // Windows allows absolute paths like this.
    21122113        if ( preg_match( '#^[a-zA-Z]:\\\\#', $path ) ) {
     2114                return true;
     2115        }
     2116
     2117        // Normalized Windows paths for local filesystem and network shares (forward slashes).
     2118        if ( preg_match( '#(^[a-zA-Z]+:/|^//[\w!@\#\$%\^\(\)\-\'{}\.~]{1,15})#', $path ) ) {
    21132119                return true;
    21142120        }
  • trunk/src/wp-includes/post.php

    r53883 r53934  
    725725
    726726        // If the file is relative, prepend upload dir.
    727         if ( $file && 0 !== strpos( $file, '/' ) && ! preg_match( '|^.:\\\|', $file ) ) {
     727        if ( $file ) {
    728728                $uploads = wp_get_upload_dir();
     729
    729730                if ( false === $uploads['error'] ) {
    730                         $file = $uploads['basedir'] . "/$file";
     731                        $file = path_join( $uploads['basedir'], $file );
    731732                }
    732733        }
  • trunk/tests/phpunit/tests/functions.php

    r53890 r53934  
    106106                        'C:\\WINDOWS',
    107107                        '\\\\sambashare\\foo',
     108                        'c:/',
     109                        'c://',
     110                        '//',
     111                        'c:/FOO',
     112                        '//FOO',
     113                        'C:/WWW/Sites/demo/htdocs/wordpress/wp-content/uploads/2016/03/example.jpg',
     114                        '//ComputerName/ShareName/SubfolderName/example.txt',
    108115                );
    109116                foreach ( $absolute_paths as $path ) {
     
    120127                        '../',
    121128                        '../foo.bar',
     129                        'foo.bar',
    122130                        'foo/bar',
    123131                        'foo',
    124132                        'FOO',
    125133                        '..\\WINDOWS',
     134                        '..//WINDOWS',
     135                        'c:',
     136                        'C:',
    126137                );
    127138                foreach ( $relative_paths as $path ) {
Note: See TracChangeset for help on using the changeset viewer.