Formatting: Don't run `wp_targeted_link_rel()` on entirely serialized content.

Props birgire, elliotcondon.
Fixes #46402.

git-svn-id: https://develop.svn.wordpress.org/trunk@45408 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2019-05-25 12:04:28 +00:00
parent 8226fe338f
commit bda3af14b0
2 changed files with 15 additions and 1 deletions

View File

@ -3040,7 +3040,9 @@ function wp_rel_nofollow_callback( $matches ) {
function wp_targeted_link_rel( $text ) {
// Don't run (more expensive) regex if no links with targets.
if ( stripos( $text, 'target' ) !== false && stripos( $text, '<a ' ) !== false ) {
$text = preg_replace_callback( '|<a\s([^>]*target\s*=[^>]*)>|i', 'wp_targeted_link_rel_callback', $text );
if ( ! is_serialized( $text ) ) {
$text = preg_replace_callback( '|<a\s([^>]*target\s*=[^>]*)>|i', 'wp_targeted_link_rel_callback', $text );
}
}
return $text;

View File

@ -127,4 +127,16 @@ class Tests_Targeted_Link_Rel extends WP_UnitTestCase {
$expected = '<p>Links: <a href=\'\/\' target=_blank rel=\'noopener noreferrer\'>No rel<\/a><\/p>';
$this->assertEquals( $expected, wp_targeted_link_rel( $content ) );
}
/**
* Ensure entirely serialized content is ignored.
*
* @ticket 46402.
*/
public function test_ignore_entirely_serialized_content() {
$content = 'a:1:{s:4:"html";s:52:"<p>Links: <a href="/" target="_blank">No Rel</a></p>";}';
$expected = 'a:1:{s:4:"html";s:52:"<p>Links: <a href="/" target="_blank">No Rel</a></p>";}';
$this->assertEquals( $expected, wp_targeted_link_rel( $content ) );
}
}