WordPress.org

Make WordPress Core

Ticket #35979: 35979.diff

File 35979.diff, 2.6 KB (added by dd32, 6 years ago)
  • src/wp-includes/class-oembed.php

    class WP_oEmbed { 
    297297                 * @param string $data The returned oEmbed HTML.
    298298                 * @param string $url  URL of the content to be embedded.
    299299                 * @param array  $args Optional arguments, usually passed from a shortcode.
    300300                 */
    301301                return apply_filters( 'oembed_result', $this->data2html( $data, $url ), $url, $args );
    302302        }
    303303
    304304        /**
    305305         * Attempts to discover link tags at the given URL for an oEmbed provider.
    306306         *
    307307         * @param string $url The URL that should be inspected for discovery `<link>` tags.
    308308         * @return false|string False on failure, otherwise the oEmbed provider URL.
    309309         */
    310310        public function discover( $url ) {
    311311                $providers = array();
     312                $args = array(
     313                        'limit_response_size' => 153600, // 150 KB
     314                );
    312315
    313316                /**
    314317                 * Filter oEmbed remote get arguments.
    315318                 *
    316319                 * @since 4.0.0
    317320                 *
    318321                 * @see WP_Http::request()
    319322                 *
    320323                 * @param array  $args oEmbed remote get arguments.
    321324                 * @param string $url  URL to be inspected.
    322325                 */
    323                 $args = apply_filters( 'oembed_remote_get_args', array(), $url );
     326                $args = apply_filters( 'oembed_remote_get_args', $args, $url );
    324327
    325328                // Fetch URL content
    326329                $request = wp_safe_remote_get( $url, $args );
    327330                if ( $html = wp_remote_retrieve_body( $request ) ) {
    328331
    329332                        /**
    330333                         * Filter the link types that contain oEmbed provider URLs.
    331334                         *
    332335                         * @since 2.9.0
    333336                         *
    334337                         * @param array $format Array of oEmbed link types. Accepts 'application/json+oembed',
    335338                         *                      'text/xml+oembed', and 'application/xml+oembed' (incorrect,
    336339                         *                      used by at least Vimeo).
    337340                         */
    338341                        $linktypes = apply_filters( 'oembed_linktypes', array(
    339342                                'application/json+oembed' => 'json',
    340343                                'text/xml+oembed' => 'xml',
    341344                                'application/xml+oembed' => 'xml',
    342345                        ) );
    343346
    344347                        // Strip <body>
    345                         $html = substr( $html, 0, stripos( $html, '</head>' ) );
     348                        if ( $html_head_end = stripos( $html, '</head>' ) ) {
     349                                $html = substr( $html, 0, $html_head_end );
     350                        }
    346351
    347352                        // Do a quick check
    348353                        $tagfound = false;
    349354                        foreach ( $linktypes as $linktype => $format ) {
    350355                                if ( stripos($html, $linktype) ) {
    351356                                        $tagfound = true;
    352357                                        break;
    353358                                }
    354359                        }
    355360
    356361                        if ( $tagfound && preg_match_all( '#<link([^<>]+)/?>#iU', $html, $links ) ) {
    357362                                foreach ( $links[1] as $link ) {
    358363                                        $atts = shortcode_parse_atts( $link );
    359364
    360365                                        if ( !empty($atts['type']) && !empty($linktypes[$atts['type']]) && !empty($atts['href']) ) {