Make WordPress Core


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/class-IXR.php

    r12263 r10571  
    154154    // The XML parser
    155155    var $_parser;
    156     function IXR_Message (&$message) {
    157         $this->message = &$message;
     156    function IXR_Message ($message) {
     157        $this->message = $message;
    158158    }
    159159    function parse() {
    160         // first remove the XML declaration
    161         // this method avoids the RAM usage of preg_replace on very large messages
    162         $header = preg_replace( '/<\?xml.*?\?'.'>/', '', substr( $this->message, 0, 100 ), 1 );
    163         $this->message = substr_replace($this->message, $header, 0, 100);
     160        // first remove the XML declaration
     161        $this->message = preg_replace('/<\?xml.*?\?'.'>/', '', $this->message);
    164162        if (trim($this->message) == '') {
    165163            return false;
    166         }
     164        }
    167165        $this->_parser = xml_parser_create();
    168166        // Set XML parser to take the case of tags in to account
     
    171169        xml_set_object($this->_parser, $this);
    172170        xml_set_element_handler($this->_parser, 'tag_open', 'tag_close');
    173         xml_set_character_data_handler($this->_parser, 'cdata');
    174         $chunk_size = 262144; // 256Kb, parse in chunks to avoid the RAM usage on very large messages
    175         do {
    176             if ( strlen($this->message) <= $chunk_size )
    177                 $final=true;
    178             $part = substr( $this->message, 0, $chunk_size );
    179             $this->message = substr( $this->message, $chunk_size );
    180             if ( !xml_parse( $this->_parser, $part, $final ) )
    181                 return false;
    182             if ( $final )
    183                 break;
    184         } while ( true );
    185         xml_parser_free($this->_parser);
     171        xml_set_character_data_handler($this->_parser, 'cdata');
     172        if (!xml_parse($this->_parser, $this->message)) {
     173            /* die(sprintf('XML error: %s at line %d',
     174                xml_error_string(xml_get_error_code($this->_parser)),
     175                xml_get_current_line_number($this->_parser))); */
     176            return false;
     177        }
     178        xml_parser_free($this->_parser);
    186179        // Grab the error messages, if any
    187180        if ($this->messageType == 'fault') {
    188181            $this->faultCode = $this->params[0]['faultCode'];
    189182            $this->faultString = $this->params[0]['faultString'];
    190         }
     183        }
    191184        return true;
    192185    }
     
    312305               die('XML-RPC server accepts POST requests only.');
    313306            }
    314             $data = &$HTTP_RAW_POST_DATA;
     307            $data = $HTTP_RAW_POST_DATA;
    315308        }
    316309        $this->message = new IXR_Message($data);
Note: See TracChangeset for help on using the changeset viewer.