WordPress.org

Make WordPress Core

Ticket #7696: pingback_301_fix.patch

File pingback_301_fix.patch, 1.5 KB (added by Inquisitus, 10 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);