Opened 21 months ago

Last modified 18 months ago

#18575 new defect (bug)

wptexturize modifies code inside tag attributes

Reported by: iamcal Owned by:
Priority: normal Milestone: Awaiting Review
Component: Formatting Version: 3.2
Severity: normal Keywords: has-patch
Cc:

Description

In certain circumstances, wptexturize() will try to smart quote things inside attributes, screwing up the markup. For example:

[hello <a href="foo[bar]('baz')">world</a>

The tokenizer that generates $textarr will split the text like this:

0: [hello <a href="foo[bar]
1:('baz')">world
2:</a>

and so element 1 gets treated like non-tag text even though it's from an attribute. the easy fix is to not allow starting braces inside a brace set:

old:

$textarr = preg_split('/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

new:

$textarr = preg_split('/(<[^<]*>|\[[^\[]*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

this happens on trunk. code is in wp-includes/formatting.php. after the patch, the tokenizer works as intended:

0: [hello
1: <a href="foo[bar]('baz')">
2: world
3: </a>

Attachments (2)

18575.patch (538 bytes) - added by SergeyBiryukov 21 months ago.
18575_test.patch (708 bytes) - added by iamcal 21 months ago.
test case

Download all attachments as: .zip

Change History (6)

  • Summary changed from wptexturize modified code inside tag attributes to wptexturize modifies code inside tag attributes
  • Keywords has-patch needs-unit-tests added

Related: #18549

test case

  • Keywords needs-unit-tests removed
  • Version changed from 3.3 to 3.2

Thanks for the test case. Could we make it be a valid href, or use a different attribute? This seems a bit off.

Note: See TracTickets for help on using tickets.