Make WordPress Core

Changeset 53934


Ignore:
Timestamp:
08/23/2022 07:57:17 PM (2 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.