diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-includes/class-wp-oembed.php --- a/wp/wp-includes/class-wp-oembed.php Thu Sep 29 08:06:27 2022 +0200 +++ b/wp/wp-includes/class-wp-oembed.php Fri Sep 05 18:40:08 2025 +0200 @@ -4,7 +4,7 @@ * * Used internally by the WP_Embed class, but is designed to be generic. * - * @link https://wordpress.org/support/article/embeds/ + * @link https://developer.wordpress.org/advanced-administration/wordpress/oembed/ * @link http://oembed.com/ * * @package WordPress @@ -16,6 +16,7 @@ * * @since 2.9.0 */ +#[AllowDynamicProperties] class WP_oEmbed { /** @@ -53,6 +54,7 @@ '#https?://((m|www)\.)?youtube\.com/watch.*#i' => array( 'https://www.youtube.com/oembed', true ), '#https?://((m|www)\.)?youtube\.com/playlist.*#i' => array( 'https://www.youtube.com/oembed', true ), '#https?://((m|www)\.)?youtube\.com/shorts/*#i' => array( 'https://www.youtube.com/oembed', true ), + '#https?://((m|www)\.)?youtube\.com/live/*#i' => array( 'https://www.youtube.com/oembed', true ), '#https?://youtu\.be/.*#i' => array( 'https://www.youtube.com/oembed', true ), '#https?://(.+\.)?vimeo\.com/.*#i' => array( 'https://vimeo.com/api/oembed.{format}', true ), '#https?://(www\.)?dailymotion\.com/.*#i' => array( 'https://www.dailymotion.com/services/oembed', true ), @@ -62,6 +64,7 @@ '#https?://(.+\.)?smugmug\.com/.*#i' => array( 'https://api.smugmug.com/services/oembed/', true ), '#https?://(www\.)?scribd\.com/(doc|document)/.*#i' => array( 'https://www.scribd.com/services/oembed', true ), '#https?://wordpress\.tv/.*#i' => array( 'https://wordpress.tv/oembed/', true ), + '#https?://(.+\.)?crowdsignal\.net/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ), '#https?://(.+\.)?polldaddy\.com/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ), '#https?://poll\.fm/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ), '#https?://(.+\.)?survey\.fm/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ), @@ -72,14 +75,13 @@ '#https?://(www\.)?twitter\.com/\w{1,15}/timelines/.*#i' => array( 'https://publish.twitter.com/oembed', true ), '#https?://(www\.)?twitter\.com/i/moments/.*#i' => array( 'https://publish.twitter.com/oembed', true ), '#https?://(www\.)?soundcloud\.com/.*#i' => array( 'https://soundcloud.com/oembed', true ), - '#https?://(.+?\.)?slideshare\.net/.*#i' => array( 'https://www.slideshare.net/api/oembed/2', true ), '#https?://(open|play)\.spotify\.com/.*#i' => array( 'https://embed.spotify.com/oembed/', true ), '#https?://(.+\.)?imgur\.com/.*#i' => array( 'https://api.imgur.com/oembed', true ), '#https?://(www\.)?issuu\.com/.+/docs/.+#i' => array( 'https://issuu.com/oembed_wp', true ), - '#https?://(www\.)?mixcloud\.com/.*#i' => array( 'https://www.mixcloud.com/oembed', true ), + '#https?://(www\.)?mixcloud\.com/.*#i' => array( 'https://app.mixcloud.com/oembed/', true ), '#https?://(www\.|embed\.)?ted\.com/talks/.*#i' => array( 'https://www.ted.com/services/v1/oembed.{format}', true ), '#https?://(www\.)?(animoto|video214)\.com/play/.*#i' => array( 'https://animoto.com/oembeds/create', true ), - '#https?://(.+)\.tumblr\.com/post/.*#i' => array( 'https://www.tumblr.com/oembed/1.0', true ), + '#https?://(.+)\.tumblr\.com/.*#i' => array( 'https://www.tumblr.com/oembed/1.0', true ), '#https?://(www\.)?kickstarter\.com/projects/.*#i' => array( 'https://www.kickstarter.com/services/oembed', true ), '#https?://kck\.st/.*#i' => array( 'https://www.kickstarter.com/services/oembed', true ), '#https?://cloudup\.com/.*#i' => array( 'https://cloudup.com/oembed', true ), @@ -102,8 +104,12 @@ '#https?://www\.someecards\.com/usercards/viewcard/.+#i' => array( 'https://www.someecards.com/v2/oembed/', true ), '#https?://some\.ly\/.+#i' => array( 'https://www.someecards.com/v2/oembed/', true ), '#https?://(www\.)?tiktok\.com/.*/video/.*#i' => array( 'https://www.tiktok.com/oembed', true ), + '#https?://(www\.)?tiktok\.com/@.*#i' => array( 'https://www.tiktok.com/oembed', true ), '#https?://([a-z]{2}|www)\.pinterest\.com(\.(au|mx))?/.*#i' => array( 'https://www.pinterest.com/oembed.json', true ), '#https?://(www\.)?wolframcloud\.com/obj/.+#i' => array( 'https://www.wolframcloud.com/oembed', true ), + '#https?://pca\.st/.+#i' => array( 'https://pca.st/oembed.json', true ), + '#https?://((play|www)\.)?anghami\.com/.*#i' => array( 'https://api.anghami.com/rest/v1/oembed.view', true ), + '#https?://bsky.app/profile/.*/post/.*#i' => array( 'https://embed.bsky.app/oembed', true ), ); if ( ! empty( self::$early_providers['add'] ) ) { @@ -141,7 +147,6 @@ * | SmugMug | smugmug.com | 3.0.0 | * | YouTube | youtu.be | 3.0.0 | * | Twitter | twitter.com | 3.4.0 | - * | Slideshare | slideshare.net | 3.5.0 | * | SoundCloud | soundcloud.com | 3.5.0 | * | Dailymotion | dai.ly | 3.6.0 | * | Flickr | flic.kr | 3.6.0 | @@ -181,6 +186,10 @@ * | TikTok | tiktok.com | 5.4.0 | * | Pinterest | pinterest.com | 5.9.0 | * | WolframCloud | wolframcloud.com | 5.9.0 | + * | Pocket Casts | pocketcasts.com | 6.1.0 | + * | Crowdsignal | crowdsignal.net | 6.2.0 | + * | Anghami | anghami.com | 6.3.0 | + * | Bluesky | bsky.app | 6.6.0 | * * No longer supported providers: * @@ -204,6 +213,7 @@ * | Facebook | facebook.com | 4.7.0 | 5.5.2 | * | Meetup.com | meetup.com | 3.9.0 | 6.0.1 | * | Meetup.com | meetu.ps | 3.9.0 | 6.0.1 | + * | SlideShare | slideshare.net | 3.5.0 | 6.6.0 | * * @see wp_oembed_add_provider() * @@ -230,6 +240,7 @@ if ( in_array( $name, $this->compat_methods, true ) ) { return $this->$name( ...$arguments ); } + return false; } @@ -508,7 +519,7 @@ } /** - * Connects to a oEmbed provider and returns the result. + * Connects to an oEmbed provider and returns the result. * * @since 2.9.0 * @@ -544,8 +555,10 @@ if ( is_wp_error( $result ) && 'not-implemented' === $result->get_error_code() ) { continue; } + return ( $result && ! is_wp_error( $result ) ) ? $result : false; } + return false; } @@ -565,14 +578,18 @@ $args = apply_filters( 'oembed_remote_get_args', array(), $provider_url_with_args ); $response = wp_safe_remote_get( $provider_url_with_args, $args ); - if ( 501 == wp_remote_retrieve_response_code( $response ) ) { + + if ( 501 === wp_remote_retrieve_response_code( $response ) ) { return new WP_Error( 'not-implemented' ); } + $body = wp_remote_retrieve_body( $response ); if ( ! $body ) { return false; } + $parse_method = "_parse_$format"; + return $this->$parse_method( $body ); } @@ -586,6 +603,7 @@ */ private function _parse_json( $response_body ) { $data = json_decode( trim( $response_body ) ); + return ( $data && is_object( $data ) ) ? $data : false; } @@ -603,9 +621,10 @@ } if ( PHP_VERSION_ID < 80000 ) { - // This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading - // is disabled by default, so this function is no longer needed to protect against XXE attacks. - // phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.libxml_disable_entity_loaderDeprecated + /* + * This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading + * is disabled by default, so this function is no longer needed to protect against XXE attacks. + */ $loader = libxml_disable_entity_loader( true ); } @@ -636,7 +655,7 @@ return false; } - $dom = new DOMDocument; + $dom = new DOMDocument(); $success = $dom->loadXML( $response_body ); if ( ! $success ) { return false; @@ -657,7 +676,7 @@ return false; } - $return = new stdClass; + $return = new stdClass(); foreach ( $xml as $key => $value ) { $return->$key = (string) $value; } @@ -737,7 +756,7 @@ * @return string Possibly modified $html */ public function _strip_newlines( $html, $data, $url ) { - if ( false === strpos( $html, "\n" ) ) { + if ( ! str_contains( $html, "\n" ) ) { return $html; }