Make WordPress Core


Ignore:
Timestamp:
06/21/2013 03:33:52 AM (13 years ago)
Author:
nacin
Message:

Better sanity checks in oEmbed XML handling.

Merges [24470] to the 3.5 branch.

Location:
branches/3.5
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/3.5

  • branches/3.5/wp-includes/class-oembed.php

    r23161 r24471  
    220220                        return false;
    221221                }
    222 
    223                 if ( ! class_exists( 'DOMDocument' ) )
    224                         return false;
     222                if ( ! function_exists( 'libxml_disable_entity_loader' ) )
     223                        return false;
     224
     225                $loader = libxml_disable_entity_loader( true );
    225226
    226227                $errors = libxml_use_internal_errors( true );
    227                 $old_value = null;
    228                 if ( function_exists( 'libxml_disable_entity_loader' ) ) {
    229                         $old_value = libxml_disable_entity_loader( true );
    230                 }
    231 
    232                 $dom = new DOMDocument;
    233                 $success = $dom->loadXML( $response_body );
    234 
    235                 if ( ! is_null( $old_value ) ) {
    236                         libxml_disable_entity_loader( $old_value );
    237                 }
     228                $data = simplexml_load_string( $response_body );
    238229                libxml_use_internal_errors( $errors );
    239230
    240                 if ( ! $success || isset( $dom->doctype ) ) {
    241                         return false;
    242                 }
    243 
    244                 $data = simplexml_import_dom( $dom );
    245                 if ( ! is_object( $data ) )
    246                         return false;
    247 
    248                 $return = new stdClass;
    249                 foreach ( $data as $key => $value )
    250                         $return->$key = (string) $value;
     231                $return = false;
     232                if ( is_object( $data ) ) {
     233                        $return = new stdClass;
     234                        foreach ( $data as $key => $value ) {
     235                                $return->$key = (string) $value;
     236                        }
     237                }
     238
     239                libxml_disable_entity_loader( $loader );
    251240                return $return;
    252241        }
Note: See TracChangeset for help on using the changeset viewer.