WordPress.org

Make WordPress Core

Changeset 23159


Ignore:
Timestamp:
12/10/12 22:23:55 (16 months ago)
Author:
nacin
Message:

Sanity checks in oEmbed XML handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.5/wp-includes/class-oembed.php

    r22351 r23159  
    217217     */ 
    218218    function _parse_xml( $response_body ) { 
    219         if ( function_exists('simplexml_load_string') ) { 
    220             $errors = libxml_use_internal_errors( 'true' ); 
    221             $data = simplexml_load_string( $response_body ); 
    222             libxml_use_internal_errors( $errors ); 
    223             if ( ! is_object( $data ) ) 
    224                 return false; 
    225  
    226             $return = new stdClass; 
    227             foreach ( $data as $key => $value ) 
    228                 $return->$key = (string) $value; 
    229  
    230             return $return; 
    231         } 
    232         return false; 
     219        if ( !function_exists('simplexml_load_string') ) { 
     220            return false; 
     221        } 
     222 
     223        $errors = libxml_use_internal_errors( true ); 
     224        $old_value = null; 
     225        if ( function_exists( 'libxml_disable_entity_loader' ) ) { 
     226            $old_value = libxml_disable_entity_loader( true ); 
     227        } 
     228 
     229        $dom = new DOMDocument; 
     230        $success = $dom->loadXML( $response_body ); 
     231 
     232        if ( ! is_null( $old_value ) ) { 
     233            libxml_disable_entity_loader( $old_value ); 
     234        } 
     235        libxml_use_internal_errors( $errors ); 
     236 
     237        if ( ! $success || isset( $dom->doctype ) ) { 
     238            return false; 
     239        } 
     240 
     241        $data = simplexml_import_dom( $dom ); 
     242        if ( ! is_object( $data ) ) 
     243            return false; 
     244 
     245        $return = new stdClass; 
     246        foreach ( $data as $key => $value ) 
     247            $return->$key = (string) $value; 
     248        return $return; 
    233249    } 
    234250 
Note: See TracChangeset for help on using the changeset viewer.