WordPress.org

Make WordPress Core

Ticket #22625: balanceTags-23001.patch

File balanceTags-23001.patch, 1.9 KB (added by devesine, 5 years ago)
  • wp-includes/formatting.php

     
    11811181        // WP bug fix for LOVE <3 (and other situations with '<' before a number)
    11821182        $text = preg_replace('#<([0-9]{1})#', '&lt;$1', $text);
    11831183
    1184         while ( preg_match("/<(\/?[\w:]*)\s*([^>]*)>/", $text, $regex) ) {
     1184        $tag_regex = "/<(\/?[\w:]*)\s*([^>]*)>/";
     1185
     1186        while ( preg_match($tag_regex, $text, $regex) ) {
    11851187                $newtext .= $tagqueue;
    11861188
    11871189                $i = strpos($text, $regex[0]);
    11881190                $l = strlen($regex[0]);
     1191                $newtext .= substr($text, 0, $i);
     1192                $text = substr($text, $i + $l);
    11891193
     1194                // WP bug fix for dangling lone <
     1195                if ( strlen( $regex[1] ) === 0 ) {
     1196                    // Trim off up to and including lone <, encode it
     1197                    $temp_text = $regex[0];
     1198                    $lone_pos = strpos( $temp_text, '<' );
     1199                    $lone_text = substr( $temp_text, 0, $lone_pos + 1 );
     1200                    $temp_text = substr( $temp_text, $lone_pos + 1 );
     1201                    $lone_text = str_replace( '<', '&lt;', $lone_text );
     1202                    $newtext .= $lone_text;
     1203
     1204                    // Rerun the match against the remaining text
     1205                    if ( preg_match( $tag_regex, $temp_text, $regex )) {
     1206                        $i = strpos( $temp_text, $regex[0] );
     1207                        $l = strlen( $regex[0] );
     1208                        $newtext .= substr( $temp_text, 0, $i );
     1209                    }
     1210                    else {
     1211                        // Shouldn't happen, since the match should always
     1212                        // have started out similar to '< <foo>'.
     1213                        continue;
     1214                    }
     1215                }
     1216
    11901217                // clear the shifter
    11911218                $tagqueue = '';
    11921219                // Pop or Push
     
    12581285                                $tag = '';
    12591286                        }
    12601287                }
    1261                 $newtext .= substr($text, 0, $i) . $tag;
    1262                 $text = substr($text, $i + $l);
     1288                $newtext .= $tag;
    12631289        }
    12641290
    12651291        // Clear Tag Queue
    12661292        $newtext .= $tagqueue;
    12671293
    12681294        // Add Remaining text
    1269         $newtext .= $text;
     1295        $newtext .= str_replace( '<', '&lt;', $text );
    12701296
    12711297        // Empty Stack
    12721298        while( $x = array_pop($tagstack) )