WordPress.org

Make WordPress Core

Ticket #20322: wp-oembed-data2html-sanitition.diff

File wp-oembed-data2html-sanitition.diff, 1.9 KB (added by nacin, 2 years ago)

Patch from mdawaffe.

  • wp-includes/class-oembed.php

     
    227227         * @return bool|string False on error, otherwise the HTML needed to embed. 
    228228         */ 
    229229        function data2html( $data, $url ) { 
    230                 if ( !is_object($data) || empty($data->type) ) 
     230                if ( !is_object( $data ) || empty( $data->type ) ) 
    231231                        return false; 
    232232 
    233233                switch ( $data->type ) { 
    234234                        case 'photo': 
    235                                 if ( empty($data->url) || empty($data->width) || empty($data->height) ) 
     235                                if ( 
     236                                        empty( $data->url ) || !is_string( $data->url ) 
     237                                || 
     238                                        empty( $data->width ) || !is_numeric( $data->width ) 
     239                                || 
     240                                        empty( $data->height ) || !is_numeric( $data->height ) 
     241                                ) { 
    236242                                        return false; 
     243                                } 
    237244 
    238                                 $title = ( !empty($data->title) ) ? $data->title : ''; 
    239                                 $return = '<a href="' . esc_url( $url ) . '"><img src="' . esc_url( $data->url ) . '" alt="' . esc_attr($title) . '" width="' . esc_attr($data->width) . '" height="' . esc_attr($data->height) . '" /></a>'; 
     245                                $title = empty( $data->title ) || !is_string( $data->title ) ? '' : $data->title; 
     246                                $return = '<a href="' . esc_url( $url ) . '"><img src="' . esc_url( $data->url ) . '" alt="' . esc_attr( $title ) . '" width="' . esc_attr( $data->width ) . '" height="' . esc_attr( $data->height ) . '" /></a>'; 
    240247                                break; 
    241248 
    242249                        case 'video': 
    243250                        case 'rich': 
    244                                 $return = ( !empty($data->html) ) ? $data->html : false; 
     251                                $return = empty( $data->html ) || !is_string( $data->html ) ? false : $data->html; 
    245252                                break; 
    246253 
    247254                        case 'link': 
    248                                 $return = ( !empty($data->title) ) ? '<a href="' . esc_url($url) . '">' . esc_html($data->title) . '</a>' : false; 
     255                                $return = empty( $data->title ) || !is_string( $data->title ) ? false : '<a href="' . esc_url($url) . '">' . esc_html($data->title) . '</a>'; 
    249256                                break; 
    250257 
    251258                        default;