X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/8f374b7233bc2815ccc387e448d208c5434eb961..0461a5f2e55c8d5f1fde96ca2e83117152573c7d:/wp-includes/class-IXR.php diff --git a/wp-includes/class-IXR.php b/wp-includes/class-IXR.php index 64a60d46..f576719c 100644 --- a/wp-includes/class-IXR.php +++ b/wp-includes/class-IXR.php @@ -30,7 +30,7 @@ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * @package IXR - * @since 1.5 + * @since 1.5.0 * * @copyright Incutio Ltd 2010 (http://www.incutio.com) * @version 1.7.4 7th September 2010 @@ -43,7 +43,7 @@ * IXR_Value * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_Value { var $data; @@ -171,7 +171,7 @@ class IXR_Value { * IXR_MESSAGE * * @package IXR - * @since 1.5 + * @since 1.5.0 * */ class IXR_Message @@ -203,11 +203,37 @@ class IXR_Message { // first remove the XML declaration // merged from WP #10698 - this method avoids the RAM usage of preg_replace on very large messages - $header = preg_replace( '/<\?xml.*?\?'.'>/', '', substr($this->message, 0, 100), 1); - $this->message = substr_replace($this->message, $header, 0, 100); - if (trim($this->message) == '') { + $header = preg_replace( '/<\?xml.*?\?'.'>/s', '', substr( $this->message, 0, 100 ), 1 ); + $this->message = trim( substr_replace( $this->message, $header, 0, 100 ) ); + if ( '' == $this->message ) { return false; } + + // Then remove the DOCTYPE + $header = preg_replace( '/^]*+>/i', '', substr( $this->message, 0, 200 ), 1 ); + $this->message = trim( substr_replace( $this->message, $header, 0, 200 ) ); + if ( '' == $this->message ) { + return false; + } + + // Check that the root tag is valid + $root_tag = substr( $this->message, 0, strcspn( substr( $this->message, 0, 20 ), "> \t\r\n" ) ); + if ( 'message, '<' ) ) { + return false; + } + $this->_parser = xml_parser_create(); // Set XML parser to take the case of tags in to account xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false); @@ -344,7 +370,7 @@ class IXR_Message * IXR_Server * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_Server { @@ -466,11 +492,18 @@ EOD; function output($xml) { - $xml = ''."\n".$xml; + $charset = function_exists('get_option') ? get_option('blog_charset') : ''; + if ($charset) + $xml = ''."\n".$xml; + else + $xml = ''."\n".$xml; $length = strlen($xml); header('Connection: close'); header('Content-Length: '.$length); - header('Content-Type: text/xml'); + if ($charset) + header('Content-Type: text/xml; charset='.$charset); + else + header('Content-Type: text/xml'); header('Date: '.date('r')); echo $xml; exit; @@ -548,7 +581,7 @@ EOD; * IXR_Request * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_Request { @@ -591,7 +624,7 @@ EOD; * IXR_Client * * @package IXR - * @since 1.5 + * @since 1.5.0 * */ class IXR_Client @@ -622,6 +655,10 @@ class IXR_Client if (!$this->path) { $this->path = '/'; } + + if ( ! empty( $bits['query'] ) ) { + $this->path .= '?' . $bits['query']; + } } else { $this->server = $server; $this->path = $path; @@ -743,7 +780,7 @@ class IXR_Client * IXR_Error * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_Error { @@ -785,7 +822,7 @@ EOD; * IXR_Date * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_Date { var $year; @@ -848,7 +885,7 @@ class IXR_Date { * IXR_Base64 * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_Base64 { @@ -869,7 +906,7 @@ class IXR_Base64 * IXR_IntrospectionServer * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_IntrospectionServer extends IXR_Server { @@ -1032,7 +1069,7 @@ class IXR_IntrospectionServer extends IXR_Server * IXR_ClientMulticall * * @package IXR - * @since 1.5 + * @since 1.5.0 */ class IXR_ClientMulticall extends IXR_Client {