WordPress.org

Make WordPress Core

Ticket #4137: 4137-functions-new.patch

File 4137-functions-new.patch, 2.2 KB (added by pishmishy, 7 years ago)

patch improved with suggestions

  • functions.php

     
    692692        return $array; 
    693693} 
    694694 
     695function wp_limited_curl($url) { 
     696        /* This function is a wrapper for curl 
     697         * that limits the amount of data we 
     698         * fetch from a URI to avoid DOS problems 
     699         * with wp_remote_fopen() 
     700         */ 
     701 
     702        $ch = curl_init($url); 
     703        global $total; 
     704        global $output; 
     705        $total = 0; 
     706        $output = ""; 
     707 
     708        function read_body($ch, $string) { 
     709                $length = strlen($string); 
     710                global $total; 
     711                global $output; 
     712                $total += $length; 
     713                $output .= $string; 
     714                if ($total > 30720) return -1; 
     715                return $length; 
     716        } 
     717 
     718        curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body'); 
     719        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); 
     720        curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
     721        curl_setopt($ch, CURLOPT_BUFFERSIZE, 4096); 
     722        curl_setopt($ch, CURLOPT_RANGE, "0-30720"); 
     723        curl_exec($ch); 
     724        curl_close($ch); 
     725 
     726        return $output; 
     727} 
     728 
    695729function wp_remote_fopen( $uri ) { 
    696         $timeout = 10; 
     730        $bytes_limit = 30720;  /* limit on size of source documen bytes, see  
     731                                * Errata for pingback specification. 
     732                                * http://www.hixie.ch/specs/pingback/pingback 
     733                                */ 
     734        $timeout = 10;  
    697735        $parsed_url = @parse_url($uri); 
    698736 
    699737        if ( !$parsed_url || !is_array($parsed_url) ) 
     
    709747 
    710748                //stream_set_timeout($fp, $timeout); // Requires php 4.3 
    711749                $linea = ''; 
    712                 while( $remote_read = fread($fp, 4096) ) 
     750                $bytes = 0; 
     751                while( $remote_read = fread($fp, 4096) && $bytes < $bytes_limit ) 
     752                        $bytes = $bytes + 4096; 
    713753                        $linea .= $remote_read; 
    714754                fclose($fp); 
    715755                return $linea; 
    716756        } else if ( function_exists('curl_init') ) { 
    717                 $handle = curl_init(); 
    718                 curl_setopt ($handle, CURLOPT_URL, $uri); 
    719                 curl_setopt ($handle, CURLOPT_CONNECTTIMEOUT, 1); 
    720                 curl_setopt ($handle, CURLOPT_RETURNTRANSFER, 1); 
    721                 curl_setopt ($handle, CURLOPT_TIMEOUT, $timeout); 
    722                 $buffer = curl_exec($handle); 
    723                 curl_close($handle); 
    724                 return $buffer; 
     757                return wp_limited_curl($uri); 
    725758        } else { 
    726759                return false; 
    727760        }