WordPress.org

Make WordPress Core

Changeset 23159


Ignore:
Timestamp:
12/10/2012 10:23:55 PM (5 years 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.