Make WordPress Core

Ticket #16057: 16057.5.diff

File 16057.5.diff, 2.4 KB (added by dd32, 11 years ago)
  • src/wp-includes/class-http.php

     
    864864                                        }
    865865                                }
    866866
    867                                 if ( isset( $r['limit_response_size'] ) && ( $bytes_written + strlen( $block ) ) > $r['limit_response_size'] )
     867                                $this_block_size = strlen( $block );
     868
     869                                if ( isset( $r['limit_response_size'] ) && ( $bytes_written + $this_block_size ) > $r['limit_response_size'] )
    868870                                        $block = substr( $block, 0, ( $r['limit_response_size'] - $bytes_written ) );
    869871
    870                                 $bytes_written += fwrite( $stream_handle, $block );
     872                                $bytes_written_to_file = fwrite( $stream_handle, $block );
    871873
     874                                if ( $bytes_written_to_file != $this_block_size ) {
     875                                        fclose( $handle );
     876                                        fclose( $stream_handle );
     877                                        return new WP_Error( 'http_request_failed', __( 'Failed to write request to temporary file.' ) );
     878                                }
     879
     880                                $bytes_written += $bytes_written_to_file;
     881
    872882                                $keep_reading = !isset( $r['limit_response_size'] ) || $bytes_written < $r['limit_response_size'];
    873883                        }
    874884
     
    12291239                $this->headers = '';
    12301240                $this->body = '';
    12311241
    1232                 // If no response
    1233                 if ( 0 == strlen( $theBody ) && empty( $theHeaders['headers'] ) ) {
     1242                $curl_error = curl_errno( $handle );
     1243
     1244                // If an error occured, or, no response
     1245                if ( $curl_error || ( 0 == strlen( $theBody ) && empty( $theHeaders['headers'] ) ) ) {
     1246                        if ( CURLE_WRITE_ERROR /* 23 */ == $curl_error &&  $r['stream'] ) {
     1247                                fclose( $this->stream_handle );
     1248                                return new WP_Error( 'http_request_failed', __( 'Failed to write request to temporary file.' ) );
     1249                        }
    12341250                        if ( $curl_error = curl_error( $handle ) ) {
    12351251                                curl_close( $handle );
    12361252                                return new WP_Error( 'http_request_failed', $curl_error );
     
    13041320                        $data = substr( $data, 0, ( $this->max_body_length - strlen( $this->body ) ) );
    13051321
    13061322                if ( $this->stream_handle )
    1307                         fwrite( $this->stream_handle, $data );
     1323                        $bytes_written = fwrite( $this->stream_handle, $data );
    13081324                else
    13091325                        $this->body .= $data;
    13101326
    1311                 $data_length = strlen( $data );
    1312 
    13131327                if ( isset( $mb_encoding ) )
    13141328                        mb_internal_encoding( $mb_encoding );
    13151329
    1316                 return $data_length;
     1330                // Upon event of this function returning less than strlen( $data ) curl will error with CURLE_WRITE_ERROR
     1331                return isset( $bytes_written ) ? $bytes_written : strlen( $data );
    13171332        }
    13181333
    13191334        /**