wp/wp-includes/SimplePie/Parser.php
changeset 19 3d72ae0968f4
parent 16 a86126ab1dd4
equal deleted inserted replaced
18:be944660c56a 19:3d72ae0968f4
   162 			xml_set_object($xml, $this);
   162 			xml_set_object($xml, $this);
   163 			xml_set_character_data_handler($xml, 'cdata');
   163 			xml_set_character_data_handler($xml, 'cdata');
   164 			xml_set_element_handler($xml, 'tag_open', 'tag_close');
   164 			xml_set_element_handler($xml, 'tag_open', 'tag_close');
   165 
   165 
   166 			// Parse!
   166 			// Parse!
   167 			if (!xml_parse($xml, $data, true))
   167 			$wrapper = @is_writable(sys_get_temp_dir()) ? 'php://temp' : 'php://memory';
   168 			{
   168 			if (($stream = fopen($wrapper, 'r+')) &&
   169 				$this->error_code = xml_get_error_code($xml);
   169 				fwrite($stream, $data) &&
   170 				$this->error_string = xml_error_string($this->error_code);
   170 				rewind($stream))
       
   171 			{
       
   172 				//Parse by chunks not to use too much memory
       
   173 				do
       
   174 				{
       
   175 					$stream_data = fread($stream, 1048576);
       
   176 					if (!xml_parse($xml, $stream_data === false ? '' : $stream_data, feof($stream)))
       
   177 					{
       
   178 						$this->error_code = xml_get_error_code($xml);
       
   179 						$this->error_string = xml_error_string($this->error_code);
       
   180 						$return = false;
       
   181 						break;
       
   182 					}
       
   183 				} while (!feof($stream));
       
   184 				fclose($stream);
       
   185 			}
       
   186 			else
       
   187 			{
   171 				$return = false;
   188 				$return = false;
   172 			}
   189 			}
       
   190 
   173 			$this->current_line = xml_get_current_line_number($xml);
   191 			$this->current_line = xml_get_current_line_number($xml);
   174 			$this->current_column = xml_get_current_column_number($xml);
   192 			$this->current_column = xml_get_current_column_number($xml);
   175 			$this->current_byte = xml_get_current_byte_index($xml);
   193 			$this->current_byte = xml_get_current_byte_index($xml);
   176 			xml_parser_free($xml);
   194 			xml_parser_free($xml);
   177 			return $return;
   195 			return $return;