WordPress.org

Make WordPress Core

Ticket #23196: 23196.diff

File 23196.diff, 1.7 KB (added by dd32, 8 months ago)
  • wp-includes/functions.php

     
    13161316        $wrapper = null; 
    13171317 
    13181318        // strip the protocol 
    1319         if( wp_is_stream( $target ) ) { 
     1319        if ( wp_is_stream( $target ) ) { 
    13201320                list( $wrapper, $target ) = explode( '://', $target, 2 ); 
    13211321        } 
    13221322 
     
    13241324        $target = str_replace( '//', '/', $target ); 
    13251325 
    13261326        // put the wrapper back on the target 
    1327         if( $wrapper !== null ) { 
     1327        if ( $wrapper !== null ) { 
    13281328                $target = $wrapper . '://' . $target; 
    13291329        } 
    13301330 
     
    13361336        if ( file_exists( $target ) ) 
    13371337                return @is_dir( $target ); 
    13381338 
    1339         // Attempting to create the directory may clutter up our display. 
    1340         if ( @mkdir( $target ) ) { 
    1341                 $stat = @stat( dirname( $target ) ); 
    1342                 $dir_perms = $stat['mode'] & 0007777;  // Get the permission bits. 
    1343                 @chmod( $target, $dir_perms ); 
     1339        // We need to find the permissions of the parent folder that exists and inherit that. 
     1340        $target_parent = dirname( $target ); 
     1341        while ( '.' != $target_parent && ! is_dir( $target_parent ) ) { 
     1342                $target_parent = dirname( $target_parent ); 
     1343        } 
     1344 
     1345        // Get the permission bits. 
     1346        if ( $target_parent && '.' != $target_parent ) { 
     1347                $stat = @stat( $target_parent ); 
     1348                $dir_perms = $stat['mode'] & 0007777; 
     1349        } else { 
     1350                $dir_perms = 0700; 
     1351        } 
     1352 
     1353        if ( @mkdir( $target, $dir_perms, true ) ) { 
    13441354                return true; 
    1345         } elseif ( is_dir( dirname( $target ) ) ) { 
    1346                         return false; 
    13471355        } 
    13481356 
    1349         // If the above failed, attempt to create the parent node, then try again. 
    1350         if ( ( $target != '/' ) && ( wp_mkdir_p( dirname( $target ) ) ) ) 
    1351                 return wp_mkdir_p( $target ); 
    1352  
    13531357        return false; 
    13541358} 
    13551359