WordPress.org

Make WordPress Core

Ticket #25237: 25237.diff

File 25237.diff, 5.1 KB (added by dd32, 7 years ago)
  • src/wp-admin/includes/class-wp-filesystem-direct.php

     
    5959         * @param int $mode (optional) The file permissions as octal number, usually 0644.
    6060         * @return bool False upon failure.
    6161         */
    62         function put_contents($file, $contents, $mode = false ) {
    63                 if ( ! ($fp = @fopen($file, 'w')) )
     62        function put_contents( $file, $contents, $mode = false ) {
     63                $fp = @fopen( $file, 'wb' );
     64                if ( ! $fp )
    6465                        return false;
    65                 @fwrite($fp, $contents);
    66                 @fclose($fp);
    67                 $this->chmod($file, $mode);
     66
     67                $bytes_written = fwrite( $fp, $contents );
     68
     69                fclose( $fp );
     70
     71                if ( false === $bytes_written || $bytes_written != strlen( $contents ) )
     72                        return false;
     73
     74                $this->chmod( $file, $mode );
     75
    6876                return true;
    6977        }
    7078        /**
  • src/wp-admin/includes/class-wp-filesystem-ftpext.php

     
    8888                return true;
    8989        }
    9090
    91         function get_contents($file, $type = '', $resumepos = 0 ) {
    92                 if ( empty($type) )
    93                         $type = FTP_BINARY;
    94 
     91        function get_contents( $file ) {
    9592                $tempfile = wp_tempnam($file);
    9693                $temp = fopen($tempfile, 'w+');
    9794
    9895                if ( ! $temp )
    9996                        return false;
    10097
    101                 if ( ! @ftp_fget($this->link, $temp, $file, $type, $resumepos) )
     98                if ( ! @ftp_fget($this->link, $temp, $file, FTP_BINARY ) )
    10299                        return false;
    103100
    104101                fseek($temp, 0); //Skip back to the start of the file being written to
     
    117114
    118115        function put_contents($file, $contents, $mode = false ) {
    119116                $tempfile = wp_tempnam($file);
    120                 $temp = fopen($tempfile, 'w+');
     117                $temp = fopen( $tempfile, 'wb+' );
    121118                if ( ! $temp )
    122119                        return false;
    123120
    124                 fwrite($temp, $contents);
    125                 fseek($temp, 0); //Skip back to the start of the file being written to
     121                $bytes_written = fwrite( $temp, $contents );
     122                if ( false === $bytes_written || $bytes_written != strlen( $contents ) ) {
     123                        fclose( $temp );
     124                        unlink( $tempfile );
     125                        return false;
     126                }
    126127
     128                fseek( $temp, 0 ); // Skip back to the start of the file being written to
     129
    127130                $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
    128131                $ret = @ftp_fput($this->link, $file, $temp, $type);
    129132
     
    187190                if ( ! $overwrite && $this->exists($destination) )
    188191                        return false;
    189192                $content = $this->get_contents($source);
    190                 if ( false === $content)
     193                if ( false === $content )
    191194                        return false;
    192195                return $this->put_contents($destination, $content, $mode);
    193196        }
  • src/wp-admin/includes/class-wp-filesystem-ftpsockets.php

     
    7575                        return false;
    7676                }
    7777
    78                 $this->ftp->SetType(FTP_AUTOASCII);
     78                // ASCII mode will auto-convert line endings
     79                $this->ftp->SetType(FTP_BINARY);
    7980                $this->ftp->Passive(true);
    8081                $this->ftp->setTimeout(FS_TIMEOUT);
    8182                return true;
    8283        }
    8384
    84         function get_contents($file, $type = '', $resumepos = 0) {
     85        function get_contents( $file ) {
    8586                if ( ! $this->exists($file) )
    8687                        return false;
    8788
    88                 if ( empty($type) )
    89                         $type = FTP_AUTOASCII;
    90                 $this->ftp->SetType($type);
     89                // Always transfer in Binary, otherwise the ftp class will normalize line endings
     90                $this->ftp->SetType( FTP_BINARY );
    9191
    9292                $temp = wp_tempnam( $file );
    9393
     
    122122                        return false;
    123123                }
    124124
    125                 fwrite($temphandle, $contents);
    126                 fseek($temphandle, 0); //Skip back to the start of the file being written to
     125                $bytes_written = fwrite( $temphandle, $contents );
     126                if ( false === $bytes_written || $bytes_written != strlen( $contents ) ) {
     127                        fclose( $temphandle );
     128                        unlink( $temp );
     129                        return false;
     130                }
    127131
    128                 $type = $this->is_binary($contents) ? FTP_BINARY : FTP_ASCII;
    129                 $this->ftp->SetType($type);
     132                fseek( $temphandle, 0 ); // Skip back to the start of the file being written to
    130133
     134                // Always transfer in Binary, otherwise the ftp class will normalize line endings
     135                $this->ftp->SetType( FTP_BINARY );
     136
    131137                $ret = $this->ftp->fput($file, $temphandle);
    132138
    133139                fclose($temphandle);
  • src/wp-admin/includes/class-wp-filesystem-ssh2.php

     
    150150                return false;
    151151        }
    152152
    153         function get_contents($file, $type = '', $resumepos = 0 ) {
     153        function get_contents( $file ) {
    154154                $file = ltrim($file, '/');
    155155                return file_get_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file);
    156156        }
     
    164164                $file = ltrim($file, '/');
    165165                $ret = file_put_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file, $contents);
    166166
     167                if ( false === $ret || $ret != strlen( $contents ) )
     168                        return false;
     169
    167170                $this->chmod($file, $mode);
    168171
    169                 return false !== $ret;
     172                return true;
    170173        }
    171174
    172175        function cwd() {