Make WordPress Core


Ignore:
Timestamp:
09/29/2014 04:06:54 AM (10 years ago)
Author:
wonderboymusic
Message:

The joys of wptexturize():

  • Revert parts of [28773] and [28727] and [29748].
  • Do not crash PHP. Make the shortcode quantifier possessive to avoid backtracks.
  • Reduce backtracking in long HTML comments by 100x.
  • Do not ignore unclosed HTML comments.
  • Do not break unregistered shortcodes, e.g. [hello attr="value"].
  • Do not break HTML in shortcode attributes, e.g. [hello attr="<"].
  • Do not match for shortcodes when there is extra whitespace, e.g. [ hello ].
  • Add unit tests to show #12690 was not fully resolved.
  • Tested PHP 5.2.4, 5.2.13, 5.4.32, and 5.5.8.

Adds/modifies unit tests.

Props miqrogroove.
See #29557.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/formatting/WPTexturize.php

    r29748 r29781  
    11891189        return array(
    11901190            array(
     1191                '[ ... ]',
     1192                '[ &#8230; ]',
     1193            ),
     1194            array(
    11911195                '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
    11921196                '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
    11931197            ),
    11941198            array(
     1199                '[is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]', // HTML corruption is a known bug.  See tickets #12690 and #29557.
     1200                '[is it wise to <a title="allow user content ] here? hmm&#8221;> maybe </a> ]',
     1201            ),
     1202            array(
     1203                '[caption - is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
     1204                '[caption - is it wise to <a title="allow user content ] here? hmm&#8221;> maybe </a> ]',
     1205            ),
     1206            array(
    11951207                '[ photos by <a href="http://example.com/?a[]=1&a[]=2"> this guy </a> ]',
    11961208                '[ photos by <a href="http://example.com/?a[]=1&#038;a[]=2"> this guy </a> ]',
    11971209            ),
    11981210            array(
     1211                '[photos by <a href="http://example.com/?a[]=1&a[]=2"> this guy </a>]',
     1212                '[photos by <a href="http://example.com/?a[]=1&#038;a[]=2"> this guy </a>]',
     1213            ),
     1214            array(
    11991215                '[gallery ...]',
    12001216                '[gallery ...]',
     
    12131229            ),
    12141230            array(
    1215                 '[...]...[/...]', // These are potentially usable shortcodes.
    1216                 '[&#8230;]&#8230;[/&#8230;]',
    1217             ),
    1218             array(
    12191231                '[[gallery]]...[[/gallery]]', // Shortcode parsing will ignore the inner ]...[ part and treat this as a single escaped shortcode.
    12201232                '[[gallery]]&#8230;[[/gallery]]',
     
    12251237            ),
    12261238            array(
    1227                 '[gal>ery ...]',
    1228                 '[gal>ery &#8230;]',
    1229             ),
    1230             array(
    12311239                '[gallery ...',
    12321240                '[gallery &#8230;',
     
    13011309            ),
    13021310            array(
    1303                 '<!-- ... -- >',
    1304                 '<!-- ... -- >',
     1311                '<!-- ... -- > ...',
     1312                '<!-- ... -- > ...',
     1313            ),
     1314            array(
     1315                '<!-- ...', // An unclosed comment is still a comment.
     1316                '<!-- ...',
     1317            ),
     1318            array(
     1319                'a<!-->b', // Browsers seem to allow this.
     1320                'a<!-->b',
     1321            ),
     1322            array(
     1323                'a<!--->b',
     1324                'a<!--->b',
     1325            ),
     1326            array(
     1327                'a<!---->b',
     1328                'a<!---->b',
     1329            ),
     1330            array(
     1331                'a<!----->b',
     1332                'a<!----->b',
     1333            ),
     1334            array(
     1335                'a<!-- c --->b',
     1336                'a<!-- c --->b',
     1337            ),
     1338            array(
     1339                'a<!-- c -- d -->b',
     1340                'a<!-- c -- d -->b',
     1341            ),
     1342            array(
     1343                'a<!-- <!-- c --> -->b<!-- close -->',
     1344                'a<!-- <!-- c --> &#8211;>b<!-- close -->',
    13051345            ),
    13061346            array(
     
    17281768            array(
    17291769                '[code ...]...[/code]', // code is not a registered shortcode.
    1730                 '[code &#8230;]&#8230;[/code]',
     1770                '[code ...]...[/code]',
    17311771            ),
    17321772            array(
    17331773                '[hello ...]...[/hello]', // hello is not a registered shortcode.
    1734                 '[hello &#8230;]&#8230;[/hello]',
     1774                '[hello ...]&#8230;[/hello]',
     1775            ),
     1776            array(
     1777                '[...]...[/...]', // These are potentially usable shortcodes.
     1778                '[...]&#8230;[/...]',
     1779            ),
     1780            array(
     1781                '[gal>ery ...]',
     1782                '[gal>ery ...]',
     1783            ),
     1784            array(
     1785                '[randomthing param="test"]',
     1786                '[randomthing param="test"]',
    17351787            ),
    17361788            array(
Note: See TracChangeset for help on using the changeset viewer.