WordPress.org

Make WordPress Core

Ticket #29557: miqro-29557.6.patch

File miqro-29557.6.patch, 4.6 KB (added by miqrogroove, 7 years ago)
  • src/wp-includes/formatting.php

     
    2828 * @return string The string replaced with html entities
    2929 */
    3030function wptexturize($text, $reset = false) {
    31         global $wp_cockneyreplace, $shortcode_tags;
     31        global $wp_cockneyreplace;
    3232        static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements,
    3333                $default_no_texturize_tags, $default_no_texturize_shortcodes, $run_texturize = true;
    3434
     
    205205
    206206        // Look for shortcodes and HTML elements.
    207207
    208         $tagnames = array_keys( $shortcode_tags );
    209         $tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
    210         $tagregexp = "(?:$tagregexp)(?![\\w-])"; // Excerpt of get_shortcode_regex().
    211        
    212208        $regex =  '/('                  // Capture the entire match.
    213209                .       '<'             // Find start of element.
    214210                .       '(?(?=!--)'     // Is this a comment?
     
    219215                . '|'
    220216                .       '\['            // Find start of shortcode.
    221217                .       '\[?'           // Shortcodes may begin with [[
    222                 .       '\/?'           // Closing slash may precede name.
    223                 .       $tagregexp      // Only match registered shortcodes, because performance.
    224                 .       '[^\[\]]*'      // Shortcodes do not contain other shortcodes.
     218                .       '[^\[\]]++'     // Shortcodes do not contain other shortcodes. Possessive critical.
    225219                .       '\]'            // Find end of shortcode.
    226220                .       '\]?'           // Shortcodes may end with ]]
    227221                . ')/s';
     
    243237
    244238                        continue;
    245239
    246                 } elseif ( '[' === $first && 1 === preg_match( '/^\[\[?\/?' . $tagregexp . '[^\[\]]*\]\]?$/', $curl ) ) {
     240                } elseif ( '[' === $first && 1 === preg_match( '/^\[\[?[^\[\]]++\]\]?$/', $curl ) ) {
    247241                        // This is a shortcode delimiter.
    248242
    249243                        if ( '[[' !== substr( $curl, 0, 2 ) && ']]' !== substr( $curl, -2 ) ) {
  • src/wp-includes/shortcodes.php

     
    231231        $tagregexp = join( '|', array_map('preg_quote', $tagnames) );
    232232
    233233        // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    234         // Also, see shortcode_unautop() and shortcode.js and wptexturize().
     234        // Also, see shortcode_unautop() and shortcode.js.
    235235        return
    236236                  '\\['                              // Opening bracket
    237237                . '(\\[?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]]
  • tests/phpunit/tests/formatting/WPTexturize.php

     
    11881188        function data_tag_avoidance() {
    11891189                return array(
    11901190                        array(
    1191                                 '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
    1192                                 '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
     1191                                '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]', // HTML corruption is a known bug.  See tickets #12690 and #29557.
     1192                                '[ is it wise to <a title="allow user content ] here? hmm&#8221;> maybe </a> ]',
    11931193                        ),
    11941194                        array(
    11951195                                '[ photos by <a href="http://example.com/?a[]=1&a[]=2"> this guy </a> ]',
     
    12121212                                '[/gallery ...]',
    12131213                        ),
    12141214                        array(
    1215                                 '[...]...[/...]', // These are potentially usable shortcodes.
    1216                                 '[&#8230;]&#8230;[/&#8230;]',
    1217                         ),
    1218                         array(
    12191215                                '[[gallery]]...[[/gallery]]', // Shortcode parsing will ignore the inner ]...[ part and treat this as a single escaped shortcode.
    12201216                                '[[gallery]]&#8230;[[/gallery]]',
    12211217                        ),
     
    12241220                                '[[[gallery]]]&#8230;[[[/gallery]]]',
    12251221                        ),
    12261222                        array(
    1227                                 '[gal>ery ...]',
    1228                                 '[gal>ery &#8230;]',
    1229                         ),
    1230                         array(
    12311223                                '[gallery ...',
    12321224                                '[gallery &#8230;',
    12331225                        ),
     
    17271719                        ),
    17281720                        array(
    17291721                                '[code ...]...[/code]', // code is not a registered shortcode.
    1730                                 '[code &#8230;]&#8230;[/code]',
     1722                                '[code ...]...[/code]',
    17311723                        ),
    17321724                        array(
    17331725                                '[hello ...]...[/hello]', // hello is not a registered shortcode.
    1734                                 '[hello &#8230;]&#8230;[/hello]',
     1726                                '[hello ...]&#8230;[/hello]',
    17351727                        ),
    17361728                        array(
     1729                                '[...]...[/...]', // These are potentially usable shortcodes.
     1730                                '[...]&#8230;[/...]',
     1731                        ),
     1732                        array(
     1733                                '[gal>ery ...]',
     1734                                '[gal>ery ...]',
     1735                        ),
     1736                        array(
     1737                                '[randomthing param="test"]',
     1738                                '[randomthing param="test"]',
     1739                        ),
     1740                        array(
    17371741                                '[[audio]...[/audio]...', // These are potentially usable shortcodes.  Unfortunately, the meaning of [[audio] is ambiguous unless we run the entire shortcode regexp.
    17381742                                '[[audio]&#8230;[/audio]&#8230;',
    17391743                        ),