WordPress.org

Make WordPress Core

Ticket #20434: 20434.diff

File 20434.diff, 1.9 KB (added by nacin, 2 years ago)
  • wp-includes/class-http.php

     
    535535                        return !in_array( $check['host'], $accessible_hosts ); //Inverse logic, If its in the array, then we can't access it. 
    536536 
    537537        } 
     538 
     539        static function make_absolute_url( $relative_path, $url ) { 
     540                if ( empty( $url ) ) 
     541                        return $relative_path; 
     542 
     543                // Check for a scheme 
     544                if ( false !== strpos( $relative_path, '://' ) ) 
     545                        return $relative_path; 
     546 
     547                if ( ! $url_parts = @parse_url( $url ) ) 
     548                        return $relative_path; 
     549 
     550                $absolute_path = $url_parts['scheme'] . '://' . $url_parts['host']; 
     551                if ( isset( $url_parts['port'] ) ) 
     552                        $absolute_path .= ':' . $url_parts['port']; 
     553 
     554                return $absolute_path . '/' . ltrim( $relative_path, '/' ); 
     555        } 
    538556} 
    539557 
    540558/** 
     
    730748                // If location is found, then assume redirect and redirect to location. 
    731749                if ( isset($arrHeaders['headers']['location']) && 0 !== $r['_redirection'] ) { 
    732750                        if ( $r['redirection']-- > 0 ) { 
    733                                 return $this->request($arrHeaders['headers']['location'], $r); 
     751                                return $this->request( WP_HTTP::make_absolute_url( $arrHeaders['headers']['location'], $url ), $r); 
    734752                        } else { 
    735753                                return new WP_Error('http_request_failed', __('Too many redirects.')); 
    736754                        } 
     
    11311149                // See #11305 - When running under safe mode, redirection is disabled above. Handle it manually. 
    11321150                if ( ! empty( $theHeaders['headers']['location'] ) && 0 !== $r['_redirection'] ) { // _redirection: The requested number of redirections 
    11331151                        if ( $r['redirection']-- > 0 ) { 
    1134                                 return $this->request( $theHeaders['headers']['location'], $r ); 
     1152                                return $this->request( WP_HTTP::make_absolute_url( $theHeaders['headers']['location'], $url ), $r ); 
    11351153                        } else { 
    11361154                                return new WP_Error( 'http_request_failed', __( 'Too many redirects.' ) ); 
    11371155                        }