WordPress.org

Make WordPress Core

Ticket #7696: pingback_301_fix.patch

File pingback_301_fix.patch, 1.5 KB (added by Inquisitus, 6 years ago)
  • comment.php

     
    10211021 * @param int $timeout_bytes Number of bytes to timeout at. Prevents big file downloads, default is 2048. 
    10221022 * @return bool|string False on failure, string containing URI on success. 
    10231023 */ 
    1024 function discover_pingback_server_uri($url, $timeout_bytes = 2048) { 
     1024function discover_pingback_server_uri($url, $timeout_bytes = 2048, $redirects = 3) { 
    10251025        global $wp_version; 
    10261026 
    10271027        $byte_count = 0; 
     
    10501050        // ob_end_flush(); 
    10511051        fputs($fp, $request); 
    10521052 
     1053        // Determine response code; if we receive a 301, then follow it 
     1054        $line = fgets($fp, 512); 
     1055        preg_match('!^HTTP/(\w|\d)+?\.(\w|\d)+? (?P<code>\d+?) !i', $line, $matches); 
     1056        $response_code = isset($matches['code']) ? (int)$matches['code'] : null; 
     1057        if ( $response_code == 301 ) { 
     1058                if ( $redirects < 1 ) { 
     1059                        // Can't follow any more redirects :( 
     1060                        return false; 
     1061                } 
     1062 
     1063                // Look for a location header 
     1064                while ( !feof($fp) ) { 
     1065                        $line = fgets($fp, 512); 
     1066                        if ( trim($line) == '' ) 
     1067                                break; 
     1068                        if ( preg_match('#^location: (.+)$#i', $line, $matches) ) { 
     1069                                // Found location header; rinse and repeat 
     1070                                $location = trim($matches[1]); 
     1071                                return $this->discover_pingback_server_uri($location, $timeout_bytes, $redirects - 1); 
     1072                        } 
     1073                } 
     1074        } 
     1075 
    10531076        // Let's check for an X-Pingback header first 
    10541077        while ( !feof($fp) ) { 
    10551078                $line = fgets($fp, 512);