WordPress.org

Make WordPress Core

Ticket #22625: balanceTags-23001.patch

File balanceTags-23001.patch, 1.9 KB (added by devesine, 17 months 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) )